[英]Perform async operations with Promise.all issue
我是 nodejs 的新手,對我來說 Promise 似乎有點難以理解。 我有一個要求,我有一個對象數組(假設來自數據庫的大數據)。 我需要通過每個數據 go 並為該特定數據並行執行兩個異步操作(數據庫操作)。
這是附加的示例片段。
const data = [
{
"id": 1
},
{
"id": 2
},
{
"id": 3
},
{
"id": 4
},
{
"id": 5
}
];
(async () => {
const first = async(id) => {
// db operation
return new Promise(resolve => setTimeout(() => {
console.log("first", id);
resolve();
}, 100 * Math.random()));
};
const second = async(id) => {
// db operation
return new Promise(resolve => setTimeout(() => {
console.log("second", id);
resolve();
}, 100 * Math.random()));
};
const promiseResp = data.map(async(d) => {
await first(d.id);
await second(d.id);
});
await Promise.all(promiseResp);
})();
響應獲取:
first 5
first 3
second 5
first 4
first 2
first 1
second 3
second 2
second 4
second 1
我期望代碼針對相同的數據並行運行。 但回應並沒有像我期望的那樣。 我的期望是相同的 id,同時執行第一個和第二個異步操作,並在移動到下一個 object 之前提供 output。我們如何實現這一點?
有人可以讓我知道我失蹤的地方嗎? 任何幫助將非常感激?
編輯:另外,我們如何對所有數據執行並行操作?
要並行運行first
和second
,您不會使用await
而是
const promises = data.map(d =>
Promise.all([
first(d.id),
second(d.id),
])
);
await Promise.all(promises);
在轉到下一個 object 之前提供 output
為此,您不能使用data.map
,而是使用順序循環await
每個 object 的結果:
for (const d of data) {
await Promise.all([
first(d.id),
second(d.id),
]);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.