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

Node.js 获取承诺的值并分配给变量,node.js,promise,Node.js,Promise,utility.fetchInfo()返回承诺对象。我需要能够得到这个Promise对象的值,并将它的值赋给一个变量,以便以后在代码中使用 目前,我可以愉快地将result的值打印到控制台,但我需要能够将该值分配给myVal。到目前为止,我已经尝试了很多东西,但都没有效果 var myVal=utility.fetchInfo().then(result=>console.log(result)) 谢谢只需在回调函数体中执行赋值 utility.fetchInfo().then(result =

utility.fetchInfo()
返回承诺对象。我需要能够得到这个Promise对象的值,并将它的值赋给一个变量,以便以后在代码中使用

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

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


谢谢

只需在回调函数体中执行赋值

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

@dhilt说了些什么,但在promise回调函数中做了些什么:

utility.fetchInfo().then(result => { 
  doSomethingWith(result);
});
如果您使用的是Node或Babel的最新版本,请使用async/await:

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

当您将该值返回到另一个文件/函数时,由于使用该值的另一个函数没有等待将该值分配给该变量,因此您将无法定义该值。例如,有两个函数

function1(){
   var x=desired_value
}

function2(){
   var y = x
}
现在,function1可能需要一些时间才能将期望值分配给var x,java脚本将不再等待,它将开始运行function2,当您读取y的值时,您将得到未定义的值

为了解决这个问题,我们可以使用java脚本promise/await/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并使用wait关键字

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

现在,它将等待函数1完成,然后再将其值赋给y。

我认为您需要的是一些奇特的ES7语法:

var myVal=(异步()=>{
var data=await utility.fetchInfo();
返回数据;
})();
(异步()=>{
console.log(等待myVal);
})();
请记住
console.log(myVal)
将以
Promise{}
结束,因此您将使用

(异步()=>{
console.log(等待myVal);
})();

这将返回所需的输出。

我认为这是因为Promise resolve是异步的。我会使用async和wait关键字
const myVal=wait utility.fetchInfo()
要使其正常工作,必须将async添加到包含此行的函数中:
async function funcName()
。这样,程序将在等待行上等待,直到承诺得到解决,然后继续。我尝试了这种方法,但当我在代码中进一步使用myVal时,它的值是
未定义的
,这是因为承诺调用的异步性质。使用承诺结果的代码必须等待此结果。最简单的方法是将代码移到promise success回调函数中。啊,在我看到这一点之前,我将所有代码移到回调函数中,一切正常。现在未定义的
没有问题。这是一个好的实践还是异步/等待“更好”?我最初认为
未定义的
是由于范围问题,但显然不是,这取决于异步的性质。承诺/回调和nodej对我来说是新的:)你的问题是功能(承诺)和命令(异步/等待)范式之间圣战的一部分。我投票赞成承诺。。。如果您来自命令式世界(例如C、Java等),那么使用async/await可能会更简单……谢谢。我想我将尝试使用async/wait选项。我已经按照建议在回调函数中移动了所有必要的代码,这一切都正常工作。如何将回调函数中的
结果
分配给在获取之前初始化的变量。i、 e.我想用响应数据做更多的事情。@BrianWiley你不能干净利落地这么做。你必须在回调中做这些事情。如果您不喜欢回调的嵌套特性(称为回调地狱),那么请使用async/await.Thank,我已经读过了。我是从R Shining world发送数据帧来的。我想知道他们是否在处理这两种方式。