请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

使用Promise.all()进行3次in查询

由于三条in查询并没有顺序要求,我们这里用Promise.all()做parallel query而不是sequential query是不是更好些

const arts = []
for (let key in artInfoObj) {
    const ids = artInfoObj[key]
    if (ids.length === 0) {
        continue
    }

    key = parseInt(key)
    arts.push(await Art._getListByType(ids, key))
}

return flatten(arts)

代码如下

const arts = [];
for (let key in artInfoObj) {
  const ids = artInfoObj[key];
  if (ids.length !== 0) {
    key = parseInt(key);
    arts.push(Art._getListByType(ids, key));
  }
}
const result = await Promise.all(arts);

return flatten(result);

正在回答 回答被采纳积分+3

1回答

7七月 2020-08-12 03:15:51

前端PromiseAll也是发若干请求,然后等待3条结束后再回调吧?这个和后端查询有什么关系?

0 回复 有任何疑惑可以回复我~
  • 提问者 慕用3271571 #1
    Promise.all()里的三条数据库请求是异步发送的吧。虽然确实要等到3条都resolve之后才会回调,但是这三条请求本身是同时进行的。所以想问用Promise.all()是不是更效率些. (reference: https://stackoverflow.com/questions/45285129/any-difference-between-await-promise-all-and-multiple-await)
    回复 有任何疑惑可以回复我~ 2020-08-12 03:57:04
  • 提问者 慕用3271571 #2
    老师你for loop里的代码转换一下应该是
    await Art._getListByType(ids, 100);
    await Art._getListByType(ids, 200);
    await Art._getListByType(ids, 300);
    他们是同步的
    
    使用Promise.all()的代码转换一下应该是
    const promise1 = Art._getListByType(ids, 100);
    const promise2 = Art._getListByType(ids, 200);
    const promise3 = Art._getListByType(ids, 300);
    await(promise1);
    await(promise2);
    await(promise3);
    他们是异步的 不过Promise.all()同时具备fail fast的特性,任何一个promise如果被reject了,剩下的promise都不会被执行了
    回复 有任何疑惑可以回复我~ 2020-08-12 04:24:51
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信