首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Promise.all its promise.all --这是承诺的良好实践吗?

Promise.all its promise.all --这是承诺的良好实践吗?
EN

Stack Overflow用户
提问于 2018-07-13 00:06:58
回答 1查看 45关注 0票数 0

我不知道promise.allpromise.all解决方案中是否是一个很好的实践。我没有把握。

我需要从用户数组中获取信息,然后使用这个信息响应,我需要发送消息通知。

代码语言:javascript
复制
let userList = ['key1', 'key2', 'key3']; //More data can arrive
let promises = userList.map((userKey,index)=>{
            return GetUserById(db.ref(`Users/${userKey}`));
});

Promise.all(promises).then(responses =>{
  let notificationPromises = responses.map((user)=>{
      sendNotification('message', user.token);
  });
  return Promise.all(notificationPromises)
}).then(()=>{
   //notifications were sent
   ...
};

Promise.all嵌套来解决这个问题是个好主意吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-13 00:20:43

虽然这会奏效,但很难理解为什么这是一个比对第一组请求调用then()更好的选择--记住,then()也会返回一个承诺。在我看来,这不仅更短,而且更清晰。很明显,您正在向每个用户发送通知:

代码语言:javascript
复制
let userList = ['key1', 'key2', 'key3']; //More data can arrive
let promises = userList.map((userKey,index)=>{
            return GetUserById(db.ref(`Users/${userKey}`))
            .then(user => sendNotification('message', user.token) )
});

Promise.all(promises)
.then(()=>{
    //notifications were sent
    // ...
});

附注:在您的代码中,您需要从map()回调返回一些内容,否则notificationPromises将是一个空值数组:

代码语言:javascript
复制
Promise.all(promises).then(responses =>{
    let notificationPromises = responses.map((user)=>{
        return sendNotification('message', user.token); //<< add return
    });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51316028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档