node.js - Promise 导致 Unexpected 标识符
问题描述
这个有效:
const phantom = require('phantom');
async function createBrowser_normal() {
var instance = await phantom.create(['--ignore-ssl-errors=yes', '--load-images=no']);
}
唯一的问题是当我打电话时,createBrowser_normal()
我不能确定它是否完成了幻象实例的创建。
所以我尝试使用一个承诺......
const phantom = require('phantom');
async function createBrowser_promise() {
return new Promise((resolve, reject) => {
var instance = await phantom.create(['--ignore-ssl-errors=yes', '--load-images=no']);
return resolve();
})
}
有任何想法吗?
史蒂夫建议:
async function createBrowser_normal(cb) {
console.log("Inside Before call");
instance = await phantom.create(['--ignore-ssl-errors=yes', '--load-images=no']);
console.log("Inside After call");
return cb(instance);
}
console.log("Before call");
createBrowser_normal( instance => {
console.log("Got instance", instance);
// All code goes here.....
});
console.log("After call");
这给了我这样的日志:
Before call
Inside Before call
After call
Inside After call
Got instance Phantom {....data....}
因此,res = await createBrowser_normal
我不必将实例后面的代码放入“ // All code goes here...
”
解决方案
await
需要声明使用关键字的 Promise 函数async
。你只能await
在里面使用async
。
async function createBrowser_promise() {
return new Promise(async(resolve, reject) => {
var instance = await phantom.create(['--ignore-ssl-errors=yes', '--load-images=no']);
return resolve();
})
}
问题仅在于这一行
return new Promise((resolve, reject) => {
应该是
return new Promise(async(resolve, reject) => {
推荐阅读
- php - 一个回声中有多个回声语句?
- amazon-web-services - 在 AWS 中将大型镶木地板文件转换为 csv
- testing - 用于生成多个单独测试的 Rust 宏
- asp.net-core - .NetCore 5 会话在发布后未启动
- python - config.ini 文件加载后如何跳过多行代码?
- javascript - 单击时如何将 Html.PasswordFor 更改为 Html.TextboxFor?
- batch-file - 如何在 cmd 或 bat 文件中链接 MinGW
- razor - Razor 组件与 Razor 页面
- kubernetes - 使用 helm chart 时在 kubernetes 上动态刷新 pod 的秘密更新
- memory-leaks - 监控 ECS Fargate 中的任务以了解内存利用率