从async / await nodejs返回多个值

问题描述 投票:-3回答:1

是否可以从nodejs中的async / await返回多个值。例如,我可以在NodeJs Callback中执行此操作,如下所示:

myValues("username1", function(err, country, pincode){
    console.log(country);
    console.log(pincode);
});

function myValues(value1, callback){
    var country = getValue2FromAPI(value1); //foo
    var pincode = getValue3FromAPI(value1); //bar
    callback(null, country, pincode);
}

在async / await我会把它写成:

var final = await myValues("username1");
async function myValues(value1){
   var country = getValue2FromAPI(value1);
   var pincode = getValue3FromAPI(value1); 
   return country;  // I would want to return country and pincode both
}
node.js async-await
1个回答
3
投票

如果这是你想要的:

return value2;  // I would want to return value1 and value2 both

然后返回一个数组:

return [value1, value2];

或对象:

return { value1, value2 };

什么async / await可以返回(顺便说一句,这不是你的例子中的内容,尽管你的问题的标题)与承诺可以解决的相同,这总是一个单一的价值 - 但是单值可以是数组或对象。

您描述的问题,即回调函数获得多个非错误参数和承诺用单个值解析是传统节点式错误优先回调和承诺(或async / await)之间的阻抗不匹配。这在request-promise这样的模块示例中得到了证明:

宣传像request这样的回调式模块:

有时允许多个值作为回调参数传递。

这是由函数参数和return语句之间的不对称引起的。有些语言只支持单参数函数 - 有时候语法方便,所以你甚至不知道它 - 有些语言支持从函数返回的多个值。 JavaScript支持多个参数但是返回单个返回值,因此可以作为参数传递的内容与可以返回的内容不同(除非您将所有参数视为单个数组,即)。

© www.soinside.com 2019 - 2024. All rights reserved.