从async / await nodejs返回多个值

时间:2018-02-09 15:29:54

标签: node.js async-await

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

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
}

1 个答案:

答案 0 :(得分:3)

如果那是你想要的:

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

然后返回一个数组:

return [value1, value2];

或对象:

return { value1, value2 };

async / await可以返回的内容(顺便说一下,您的示例中的内容,尽管您的问题的标题)是相同的作为一个可以解决的承诺,它始终是一个单一的值 - 但该单个值可以是一个数组或一个对象。

您描述的问题,即回调函数获取多个非错误参数并且承诺使用单个值解析是传统节点式错误优先回调和承诺之间的阻抗不匹配(或{{1} } / async)。这在await

等模块的示例中得到了证明

宣传回调式模块,如request-promise

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

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