解析未在嵌套方法中定义

时间:2019-08-27 17:07:51

标签: javascript node.js

我目前正在使用节点中名为webshot js的模块。它的作用是使用幻影js拍摄网页的屏幕截图。问题是我需要等待它完成才能继续执行其他代码。我决定把它包装在一个诺言中。

function takeWebshot() {
    return new Promise((resolve, reject) => {
      webshot('url', 'save.img.jpb', Someoptions)
    })
}

webshot()方法由var webshot = require('./lib/webshot');

调用

因此,我进入了webshot js文件,并在Phantom退出后添加了resolve()

phantomProc.on('exit', function(code) {
      return resolve()
} also tried just resolve().

我不正确的思路是,它将返回resolve()然后答应会解决,然后我可以执行takewebshot()。然后...等。

但是我得到一个错误

webshot.js:242
      return resolve();
      ^

ReferenceError: resolve is not defined

我想念什么?显然做错了。

1 个答案:

答案 0 :(得分:2)

通常来说,您的代码会引发关于resolve未定义的错误,因为给定范围内的变量没有传递给该范围内称为 的函数。

一种可能的解决方法是将takeWebShot中的调用返回值分配给变量。这将占用主线程,直到函数返回为止,因为它需要等待返回值才能将其分配给变量(即使该值未定义)。在该变量分配下,您可以解决承诺。如果您要传递有意义的数据,也可以用返回值 来解决promise。

这是一个折衷的解决方案,因为它看起来不像Webshot支持Promise,而且自己实现它可能是矫kill过正。

// Your script
function takeWebshot() {
    return new Promise((resolve, reject) => {
        let t = webshot('url', 'save.img.jpb', Someoptions);
        resolve();
    })
}