javascript:don';在承诺达成之前不要回来

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 问题是创建

我需要等待,直到一个承诺解决之前,我从我的功能返回。基本上,我需要同步执行某些操作,而JavaScript似乎不喜欢这种想法

这里有一个简单的例子。我有一个函数返回一个承诺,但是在另一个承诺解决之前,不能创建该承诺。结果是我的代码如下所示:

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。