Nodejs promise 批量 settle 执行结果如何使用参数
Nodejs promise 批量 settle 执行结果如何使用参数
node.js 有一个批量异步处理,在 bluebird settle 执行完还需要使用 id 咋办,请问如何获取?
var queries = array.map(function(id){
return User.schema.find({user_id: id}).execAsync();
});
return Promise.settle(queries).then(function(results){
results.forEach(function(result){
if(result.isFulfilled()){
//这里如何使用 map 遍历时的 id ?
}else if(result.isRejected()){
error(result.reason());
}
});
});
settle 是异步执行在外面定义一个变量临时存储 id 好像不行吧,如果是闭包倒是可以在每个异步执行完获取 id ,因为在同一个 function 作用域。
var queries = array.map(function(id){
return User.schema.find({user_id: id}).execAsync();
});
==>
var queries = array.map(function(id){
return User.schema.find({user_id: id}).execAsync().then(data => {
return {id: id, data: data}
});
});
这样就好了…
Got it , thanks 。
在 Node.js 中处理 Promise 的批量 settle(即等待所有 Promise 完成,无论成功还是失败),你可以使用 Promise.allSettled()
方法。这个方法返回一个在所有给定的 Promise 都已经 fulfilled 或 rejected 后的新 Promise,并且这个新 Promise 的结果是一个对象数组,每个对象表示一个 Promise 的结果。
下面是一个如何使用 Promise.allSettled()
并处理结果的示例代码:
// 示例 Promise
const promise1 = Promise.resolve(42);
const promise2 = new Promise((resolve, reject) => setTimeout(reject, 100, 'error'));
const promise3 = Promise.resolve('Hello, World!');
// 使用 Promise.allSettled()
Promise.allSettled([promise1, promise2, promise3])
.then((results) => {
results.forEach((result) => {
if (result.status === 'fulfilled') {
console.log(`Fulfilled with value: ${result.value}`);
} else if (result.status === 'rejected') {
console.log(`Rejected with reason: ${result.reason}`);
}
});
});
在这个例子中,我们创建了三个 Promise,其中一个是被拒绝的。Promise.allSettled()
会等待这三个 Promise 都完成,然后返回一个包含每个 Promise 结果的对象数组。每个对象都有一个 status
属性(值为 'fulfilled'
或 'rejected'
)以及一个 value
或 reason
属性,分别表示 Promise 的值或拒绝原因。
通过这种方式,你可以批量处理 Promise 的结果,并根据每个 Promise 的状态(成功或失败)来采取不同的行动。