javascript:don';在承诺达成之前不要回来
我需要等待,直到一个承诺解决之前,我从我的功能返回。基本上,我需要同步执行某些操作,而JavaScript似乎不喜欢这种想法 这里有一个简单的例子。我有一个函数返回一个承诺,但是在另一个承诺解决之前,不能创建该承诺。结果是我的代码如下所示:javascript:don';在承诺达成之前不要回来,javascript,node.js,promise,Javascript,Node.js,Promise,我需要等待,直到一个承诺解决之前,我从我的功能返回。基本上,我需要同步执行某些操作,而JavaScript似乎不喜欢这种想法 这里有一个简单的例子。我有一个函数返回一个承诺,但是在另一个承诺解决之前,不能创建该承诺。结果是我的代码如下所示: const lib = require('lib') var ret_promise lib.func1().then(() => { ret_promise = lib.func2() }) return ret_promise 问题是创建
const lib = require('lib')
var ret_promise
lib.func1().then(() => {
ret_promise = lib.func2()
})
return ret_promise
问题是创建了外部承诺,然后它立即转到返回,并返回未定义的
,因为然后
尚未执行。我不能将返回
放在然后
中,因为它将从内部箭头功能返回
我该怎么做?有可能吗
注意:我使用的是节点6。我不能使用
async/await
您已经接近了,您真正需要更改的是返回最初的承诺,然后在其内。然后返回第二个承诺。函数返回的承诺将在第二个承诺解析后解析
const lib = require('lib')
var ret_promise = lib.func1().then(() => {
return lib.func2()
})
return ret_promise
可以简化为
const lib = require('lib');
return lib.func1().then(() => lib.func2());
你已经很接近了,你真正需要改变的就是回报最初的承诺,然后在承诺之内。然后回报第二个承诺。函数返回的承诺将在第二个承诺解析后解析
const lib = require('lib')
var ret_promise = lib.func1().then(() => {
return lib.func2()
})
return ret_promise
可以简化为
const lib = require('lib');
return lib.func1().then(() => lib.func2());
这是不可能的。您将希望返回承诺。它实际上使事情变得非常简单,
return lib.func1()。然后(()=>lib.func2())
然后您只需附加一个。然后
即可获得结果。如果函数可以任意暂停事件循环,则会暂停整个节点应用程序,这意味着所有请求都将挂起,直到所述函数完成。有一些API可以做到这一点,例如fs.readSync,但它们仍然会遇到暂停事件循环所导致的相同问题。Async/await也不能让您摆脱这个问题,因为最终您仍然可以像现在一样等待。这就是。。。我的代码在注释中的作用。它返回一个承诺,该承诺将在lib.func2()解析时解析。.then在返回承诺之前更改承诺,使其在解析之前先等待func1,然后等待func2。这是不可能的。您将希望返回承诺。它实际上使事情变得非常简单,return lib.func1()。然后(()=>lib.func2())
然后您只需附加一个。然后
即可获得结果。如果函数可以任意暂停事件循环,则会暂停整个节点应用程序,这意味着所有请求都将挂起,直到所述函数完成。有一些API可以做到这一点,例如fs.readSync,但它们仍然会遇到暂停事件循环所导致的相同问题。Async/await也不能让您摆脱这个问题,因为最终您仍然可以像现在一样等待。这就是。。。我的代码在注释中的作用。它返回一个承诺,该承诺将在lib.func2()解析时解析。然后,在返回承诺之前更改承诺,使其在解析之前先等待func1,然后等待func2。