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

时间:2017-09-22 01:50:29

标签: node.js promise

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

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

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

由于

4 个答案:

答案 0 :(得分:3)

@dhilt说了什么但在promise回调函数中做了你的东西:

utility.fetchInfo().then(result => { 
  doSomethingWith(result);
});

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

async myFunction () {
    var myVal = await utility.fetchInfo();
}

答案 1 :(得分:1)

只需在回调函数

中进行分配即可
utility.fetchInfo().then(result => { myVal = result; });

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

let myVal; // undefined until myAsyncFunc is called

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

utility.fetchInfo().then(myAsyncFunc); // async call of myAsyncFunc

答案 2 :(得分:1)

当您将值返回到另一个文件/函数并且您变得未定义时,因为您使用该值的另一​​个函数没有等待将值分配给变量。比如有两个函数

function1(){
   var x=desired_value
}

function2(){
   var y = x
}

现在 function1 可能需要一些时间将期望值分配给 var x 并且 java 脚本不会等待它,它会开始运行 function2 并且当您读取 y 的值时,您将变得未定义。

为了解决这个问题,我们可以使用java脚本promise/await/async,从async函数返回值作为resolve。参考下面的例子

async function1(){  //function1 should be async here for this to work
   return new Promise(function(resolve,reject){
       resolve(desired_value)
});
}

以上函数可以写成

 async function1(){  //function1 should be async here for this to work

        return Promise.resolve(desired_value)
    }

现在我们可以通过调用 function1 并使用 await 关键字在另一个函数中使用这个值

function2(){
   var y = await function1();
}

现在它将等待 function1 完成,然后再将其值分配给 y。

答案 3 :(得分:0)

我认为您正在寻找的是一些花哨的 ES7 语法:

var myVal = (async () => {
    var data = await utility.fetchInfo();
    return data;
})();

(async () => {
    console.log(await myVal);
})();

请记住,console.log(myVal) 将以 Promise { <pending> } 结尾,因此您可以使用

(async () => {
    console.log(await myVal);
})();

这将返回您想要的输出。