Javascript 在嵌套方法中未定义解析

Javascript 在嵌套方法中未定义解析,javascript,node.js,Javascript,Node.js,我目前正在使用节点中名为webshotjs的模块。它使用phantom js拍摄网页的屏幕截图。问题是我需要等待它完成才能继续执行其他代码。我决定用承诺来包装这件事 function takeWebshot() { return new Promise((resolve, reject) => { webshot('url', 'save.img.jpb', Someoptions) }) } webshot()方法由var webshot=require('

我目前正在使用节点中名为webshotjs的模块。它使用phantom 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

我错过了什么?显然是做错了什么。

一般来说,您的代码会抛出一个关于
resolve
未定义的错误,因为给定范围内的变量不会传递给在该范围内调用的函数

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

这是一个折衷的解决方案,因为它看起来不像Webshot支持的承诺,而且自己实现这一点可能有些过分

//您的脚本
函数takeWebshot(){
返回新承诺((解决、拒绝)=>{
设t=webshot('url','save.img.jpb',Someoptions);
解决();
})
}

错误。。。这不是它的工作原理。webshot是在其他地方定义的,它不关闭
resolve
,因此无法访问它。您可以让webshot接受回调并将resolve作为该回调传递。在这种情况下,如何向该方法添加承诺@KevinBEither让webshot接受回调或返回承诺。您能否再添加一点代码,以便我们了解您真正想要解决承诺的地方,并为您提供解决方案。