Node.js 从异步/等待节点返回多个值
是否可以从nodejs中的async/await返回多个值。 例如,我可以在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
回调中这样做,如下所示:
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任务。所以从你所说的来看,没有办法像回调那样返回多个值。唯一的方法是将其作为数组或对象传递。