gpt4 book ai didi

javascript - Q.Promise 数组,如果超过 1 个则发出警报

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:14:54 26 4
gpt4 key购买 nike

我正在使用 Q用于处理 promise 的库。假设我有一系列 promise ,我正在等待第一个 promise 兑现以返回其值(value)。

我期望只有一个 promise 得到履行,但我不能保证这种情况,因此如果在第一个 promise 之后另一个 promise 得到履行,我想做一些事情。

显然我可以使用 Q.allSettled,但是我必须等待所有的 promise 被履行/拒绝,然后我才能访问第一个履行的 promise 的值(value)。

我想知道是否有一种方法可以在处理其他 promise 的同时访问要返回的第一个 promise 的值,这样我就可以在另一个 promise 实现时发出警报。

希望我的问题很清楚,感谢您的帮助。

Edit1 - 代码片段

如您所见,此代码返回第一个已履行 promise 的值。我想保持这种行为,同时在实现第二个 promise 时仍然能够采取行动。

var getDataSourcePromise = function(table, profileId) {
var deferred = Q.defer();

table.retrieveEntity(tableName, profileId, profileId, function(err, result, response) {
if (err) {
deferred.reject(Error(err));
}
else {
deferred.resolve(result);
}
});

return deferred.promise;
}

var promises = [];
tables.forEach(function(table, profileId) {
promises.push(getDataSourcePromise(table, profileId.toString()));
});

console.log('waiting for settle');

Q.any(promises).then(function(result) {
console.log(result);
});

Edit2 - 更多信息

如果你理解上面的代码应该做什么,我有一个通用的 GetDataSource(profileId): Q.Promise<DataSource>功能(input: profileIdoutput: a promise for a DataSource)。

我需要将第一个实现的 promise 的值返回给任何调用我的人,一旦它实现了---意味着我需要返回Q.any(promises) .另一方面,我仍然需要执行这部分代码(Benjamin Gruenbaum 的):

Q.allSettled(promises).then(function(result){
if(result.filter(function(p){ return p.state === "fulfilled"; })){
alert("Sanity failure"); // do whatever you need to recover
}
});

您建议我做什么? (抱歉之前不够清楚)

最佳答案

您可以 fork promises 并创建多个分支:

var promises = tables.map(function(table) { 
return getDataSourcePromise(table, profileId.toString());
});

Q.any(promises).then(function(result){
console.log("Result", result); // processing done
});
Q.allSettled(promises).then(function(result){
if(result.filter(function(p){ return p.state === "fulfilled"; })){
alert("Sanity failure"); // do whatever you need to recover
}
});

关于javascript - Q.Promise 数组,如果超过 1 个则发出警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34251192/

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