获取承诺的值并将其分配给变量

use*_*135 5 node.js promise

utility.fetchInfo()返回一个Promise对象。我需要能够获取此Promise对象的值,并将其值分配给一个变量,以便以后在代码中使用。

目前,我可以愉快地将值打印result到控制台,但是我需要能够将此值分配给myVal。到目前为止,我已经尝试了很多方法,但没有任何效果。

var myVal = utility.fetchInfo().then(result => console.log(result));

谢谢

dhi*_*ilt 5

只需在回调体内进行赋值即可

utility.fetchInfo().then(result => { myVal = result; });
Run Code Online (Sandbox Code Playgroud)

取决于具体情况,例如,如果有一大块异步逻辑,最好将其提取到单独的函数中:

let myVal; // undefined until myAsyncFunc is called

const myAsyncFunc = (result) => { 
   console.log(result);
   myVal = result;
   // ...
};

utility.fetchInfo().then(myAsyncFunc); // async call of myAsyncFunc
Run Code Online (Sandbox Code Playgroud)

  • 我尝试了这个,但是当我在代码中进一步使用 myVal 时,它的值是“未定义” (8认同)
  • 这是因为 Promise 调用的异步性质。使用 Promise 结果的代码必须等待该结果。最简单的方法是将代码移至承诺成功回调中。 (4认同)
  • 您的问题是功能(承诺)和命令(异步/等待)范式之间圣战的一部分。我投票支持 Promise...如果您来自命令式世界(例如 C、Java 等),那么使用 async/await 可能会更简单... (3认同)

Ian*_*ter 5

@dhilt所说的,但是在promise回调函数中做你的事情:

utility.fetchInfo().then(result => { 
  doSomethingWith(result);
});
Run Code Online (Sandbox Code Playgroud)

或者,如果您使用的是最新的Node或Babel,请使用async / await:

async myFunction () {
    var myVal = await utility.fetchInfo();
}
Run Code Online (Sandbox Code Playgroud)