gpt4 book ai didi

javascript - 数组过滤器的异步或 promise 条件

转载 作者:行者123 更新时间:2023-11-29 19:41:45 25 4
gpt4 key购买 nike

我需要根据只能异步检查的条件过滤数组。

return someList.filter(function(element){ 
//this part unfortunately has to be asynchronous
})

有没有比我现有的更好的方法来使用 promises?

此代码段使用 Q对于 promises,但实际上您可以假设任何适当的 promises 实现。

return q.all(someList.map(function (listElement) {
return promiseMeACondition(listElement.entryId).then(function (condition) {
if (condition) {
return q.fcall(function () {
return listElement;
});
} else {
return q.fcall(function(){});
}
});
}));

示例代码将 promise 解析为过滤后的数组,这就是所需的结果。

最佳答案

在像 Bluebird 这样的库中 - 你有像 .map.filter 这样的内置 promise 的方法。你的方法通常是正确的。您只是在最后缺少一个 Array.prototype.filter 来删除“坏结果”——例如,使用 BadValue 常量解析并过滤与其相等的元素。

var BadValue = {};

return q.all(someList.map(function (listElement) {
return promiseMeACondition(listElement.entryId).then(function (listElement) {
return (condition(listElement)) ? listElement : BadValue;
})).then(function(arr){
return arr.filter(function(el){ return el !== BadValue; });
});

与 bluebird :

  Promise.filter(someList,condition);

当然,您可以将此功能提取到 promise 的通用 filter 函数中。

关于javascript - 数组过滤器的异步或 promise 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22658317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com