javascript - Promise.all 里面的 Promise.all 对于 Promise 来说是一个很好的实践吗?

标签 javascript promise

我不知道 promise.all 解决方案中的 promise.all 是否是一个好的实践。我不确定。

我需要从一组用户获取信息,然后通过此信息响应,我需要发送消息通知。

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嵌套解决这个问题是个好主意吗?

最佳答案

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

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 将是一个空值数组:

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

关于javascript - Promise.all 里面的 Promise.all 对于 Promise 来说是一个很好的实践吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51316028/

相关文章:

javascript - anchor 标记上的 HTML 属性在页面加载时执行 Javascript

javascript - 解析云代码不响应错误或 promise 成功

java - 游戏中下面这句话是什么意思!文档?

javascript - Promise.promisify 后无法读取未定义的属性

javascript - promise 提高 Nodejs 的可读性

javascript - 在 Redux Reactjs 中输入内容时 TextField 失去焦点

javascript - 我应该在 React 中定义模型类吗?

javascript - 序列化一个js promises调用列表

javascript - 单击 Javascript 时返回单元格的 ID

javascript - Angular 1.5 范围变量在 PouchDB 响应函数中不起作用