如何在没有.then函数的情况下从节点js获取promise的值

mon*_*noy 9 node.js promise

我对节点js的承诺有一些问题.这是我的示例代码:

var p1 = new Promise(function(resolve, reject) {
  // my function here
});

p1.then(function(result){
  // my result
});
Run Code Online (Sandbox Code Playgroud)

这段代码是可行的,但要从p1获取值,我必须使用.then方法,我的结果值可以在p1.then上访问.如何在没有的情况下访问p1值?

低于我的期望结果:

var p1 = new Promise(function(resolve, reject) {
      // my function here
    });

var abc = NextFunction(p1);
Run Code Online (Sandbox Code Playgroud)

因为p1值将用于外部p1变量的下一个代码,怎么做.谢谢

Ale*_*exD 14

p1是a Promise,您必须等待它评估并使用Promise所需的值.

你可以在这里阅读:http://www.html5rocks.com/en/tutorials/es6/promises/

虽然result仅在已解析的函数内可用,但您可以使用简单变量对其进行扩展

var res;
p1.then(function(result){
    res = result; // Now you can use res everywhere
});
Run Code Online (Sandbox Code Playgroud)

但是要注意res只有在promise解决后才能使用,如果依赖于该值,请从下面调用下一个函数.then:

var res;
p1.then(function(result){
    var abc = NextFunction(result);
});
Run Code Online (Sandbox Code Playgroud)


toa*_*ead 6

您可以在承诺解决或拒绝后使用 await。

function resolveAfter2Seconds(x) { 
    return new Promise(resolve => {
        setTimeout(() => {
            resolve(x);
        }, 2000);
    });
}

async function f1() {
    var x = await resolveAfter2Seconds(10);
    console.log(x); // 10
}

f1();
Run Code Online (Sandbox Code Playgroud)

请注意await表达式必须在async函数内部。