Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 从异步/等待节点返回多个值_Node.js_Async Await - Fatal编程技术网

Node.js 从异步/等待节点返回多个值

Node.js 从异步/等待节点返回多个值,node.js,async-await,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);

是否可以从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
}

如果这是您想要的:

return value2;  // I would want to return value1 and value2 both
然后返回一个数组:

return [value1, value2];
或对象:

return { value1, value2 };
async
/
wait
可以返回的内容(顺便说一句,它不是示例中的内容,尽管问题的标题是这样的)与承诺可以解析的内容相同,承诺始终是单个值-但单个值可以是数组或对象

您所描述的问题,即一个回调函数获得多个非错误参数和承诺,并使用单个值解决,这是传统节点样式的错误优先回调和承诺(或
async
/
wait
)之间的阻抗不匹配。这在诸如
请求承诺
之类的模块示例中得到了演示:

它提供了回调风格的模块,如
请求

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


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

myValues()没有异步性,因此这不是异步的。要使其异步,您需要等待一些I/O(计时器、网络请求、文件交互、DB请求等)。此外,如果要返回多个值,如果要使其异步,则应在对象或数组中返回这些值。您可以阅读更多关于如何从异步调用返回的信息。可能重复为简单起见,我没有将其作为i/O任务编写,但您所说的是正确的,这个问题的假设是有i/O任务。所以从你所说的来看,没有办法像回调那样返回多个值。唯一的方法是将其作为数组或对象传递。