以下内容:
h = hs.find(h => await(isAvail(h)));
使用以下库:
const async = require('asyncawait/async'); // async is used in the isAvail function to wrap it
const await = require('asyncawait/await');
如果没有旧学校的循环数组,我似乎无法找到一种优雅的方式。问题是当find迭代数组时await似乎阻止了它。本机等待不会发生这种情况,因为await需要将该函数声明为async,它本身返回一个必须等待的Promise,然后是第四个。
有人有什么想法吗?
答案 0 :(得分:0)
你试过了吗?
h = hs.find(async h => await(isAvail(h)));
答案 1 :(得分:0)
你需要一个for循环某处。
以下是使用asyncawait
库的解决方案:
const async = require('asyncawait').async;
const await = require('asyncawait').await;
const find = async(function (arr, predicate) {
let check = false, result = null;
for (let elm of arr) {
check = await(predicate(elm));
if (check) {
result = elm;
break;
}
}
return result;
});
function isItBig (n) {
return Promise.resolve(n > 3);
}
let test = [1, 2, 3, 4, 5];
find(test, isItBig).then(console.log); //prints 4
这是一个几乎相同的解决方案,使用最近版本的node.js中包含的本机async / await:
async function find (arr, predicate) {
let check = false, result = null;
for (let elm of arr) {
check = await predicate(elm);
if (check) {
result = elm;
break;
}
}
return result;
}
async function isItBig (n) {
return n > 3;
}
let test = [1, 2, 3, 4, 5];
find(test, isItBig).then(console.log); //prints 4