这个有效:
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...
答案 0 :(得分:1)
您使用关键字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) => {
答案 1 :(得分:1)
另一种方法是使用这样的回调:
const phantom = require('phantom');
async function createBrowser_normal(cb) {
var instance = await phantom.create(['--ignore-ssl-errors=yes', '--load-images=no']);
return cb(instance);
}
createBrowser_normal(instance => { console.log("Got instance", instance); });
答案 2 :(得分:1)
这是因为您使用的是较旧的节点版本。因此,使用以下cli命令升级节点:
sudo npm cache clean -f
sudo npm install -g n
sudo n stable
要升级到最新版本,您可以使用:
sudo n latest
答案 3 :(得分:-1)
事实证明我所要做的就是采取这一点:
return new Promise((resolve,reject)=> {
并在()
之前插入异步return new Promise( async (resolve,reject)=> {
然后一切都运转良好
感谢Steve和Sarkar指出我想出这个问题的方向。