承诺导致意外的标识符

时间:2018-06-07 08:44:24

标签: node.js

这个有效:

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();
    })
}

问题是我现在enter image description here收到此错误....

有什么想法吗?

史蒂夫建议:

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...

4 个答案:

答案 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)

enter image description here

这是因为您使用的是较旧的节点版本。因此,使用以下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指出我想出这个问题的方向。