如何等待承诺得到解决?

sin*_*inθ 34 javascript node.js promise q

我正在处理需要某个函数同步的NodeJs框架,但我需要检索一个只能异步访问的值.在一个完美的世界里,我能够回报一个承诺,但我不能.

作为一个快速而肮脏的解决方案,我创建了以下方法:

exports.synchronizePromise = function(promise) {
    var value;
    promise.then(function(promiseValue) {
        value = promiseValue;
    });
    while (!value) {} // Wait for promise to resolve
    console.log("DONE: " + value); // Never reached
    return value;
};
Run Code Online (Sandbox Code Playgroud)

但是我收到了一个错误.有没有办法完成我需要的东西?

Esa*_*ija 3

在 Q 中,如果你有一个已解决的承诺,你可以通过检查获取该值

exports.synchronizePromise = function(promise) {
  var i = promise.inspect();
    if (i.state === "rejected") {
      throw i.reason;
    } else if (i.state === "fulfilled") {
      return i.value;
    } else {
      throw new Error("attempt to synchronize pending promise")
    }
};
Run Code Online (Sandbox Code Playgroud)

但是,如果承诺处于待处理状态,那么它确实是异步的,并且您的问题没有意义,并且该函数将抛出错误。