我目前正在使用节点中名为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
我想念什么?显然做错了。
答案 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();
})
}