【发布时间】:2020-11-14 22:46:52
【问题描述】:
我是 nodejs 的新手,对我来说 Promise 似乎有点难以理解。我有一个要求,我有一个对象数组(假设来自数据库的大数据)。我需要遍历每个数据并针对该特定数据并行执行两个异步操作(数据库操作)。
这是附加的示例 sn-p。
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,并行执行第一个和第二个异步操作,并在移动到下一个对象之前提供输出。我们怎样才能做到这一点?
有人可以告诉我我在哪里失踪吗?任何帮助将不胜感激?
编辑:另外,我们如何对所有数据执行并行操作?
【问题讨论】:
-
你明确地在做
await first(d.id); await second(d.id);,它按id顺序运行这两个函数。 -
@Bergi 对不起,我没明白你的意思。请再来?
标签: javascript node.js promise async-await