如果测试是异步的并且可能抛出错误,如何检查每个元素是否通过测试
const exists = async () => {//can throw an error}
const allExists = [12, 5, 8, 130, 44].every(exists);
Run Code Online (Sandbox Code Playgroud)
您不能像使用every异步工作的函数那样使用同步方法,因为同步方法不会等待异步结果。async every不过,可以写一个:
async function every(array, callback) {
for (const element of array) {
const result = await callback(element);
if (!result) {
return false;
}
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
请注意,由于它依赖于异步信息,因此它也异步传递结果。你必须await这样做(或使用.then/.catch等)。
该版本按系列工作,仅当第一个条目的回调完成其工作时才调用第二个条目的回调。这可以让您短路(当您已经知道答案时,不会调用后面条目的回调),但可能会导致总体时间更长。另一种方法是并行执行所有调用,然后检查它们的结果:
Promise.all(array.map(callback))
.then(flags => flags.every(Boolean))
.then(result => {
// ...`result` will be `true` or `false`...
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2722 次 |
| 最近记录: |