【发布时间】:2020-08-07 01:53:50
【问题描述】:
我正在开发一个使用 Array.reduce 的函数,我需要在 reduce 函数中添加一个异步 API 调用。这需要我对传入reduce 的回调使用异步函数,因为我在函数内部使用await 来等待异步API 调用。
我在正确编写 reduce 时遇到了一些问题。以下是它目前的情况(工作):
const result = records.reduce((array, currValue) => {
//do stuff
return array
}, [])
这是我尝试将其更改为:
const result = records.reduce(async(array, currentValue) => {
// do stuff
someValue = await asyncCall(currentValue)
array.add(someValue)
return array
}, [])
我得到的错误是“没有重载匹配这个调用”。
这对我来说似乎很有意义,因为 reduce 接受一个返回数组的回调,而异步函数返回一个回调,而不是数组。但是当我阅读其他关于如何将异步函数传递给 .reduce 的示例时,它们似乎都只是将异步函数传递给 reduce 没有问题。
以下是我查看的几个链接:
https://advancedweb.hu/how-to-use-async-functions-with-array-reduce-in-javascript/
JavaScript array .reduce with async/await
https://gyandeeps.com/array-reduce-async-await/
当我将归约函数声明为异步时,我得到了没有匹配的重载错误,这对我来说很有意义。我不确定这对其他人是否有效。
【问题讨论】:
-
您链接的第一篇文章包含一个关键区别:您的
.reduce()调用将返回一个 Promise(不是回调),因此您需要在.then()回调或其他地方收集实际结果在包装器async函数内调用.reduce(),以便它也可以与await一起使用。
标签: javascript asynchronous async-await reduce