【问题标题】:Map dispatch functions to array for Promise.all将调度函数映射到 Promise.all 的数组
【发布时间】:2020-02-19 19:34:22
【问题描述】:

我或多或少有以下代码块:

let images = [{ ... }, { ... }, { ... }, ...];

Promise.all([
  dispatch(uploadImage(images[0]),
  dispatch(uploadImage(images[1]),
  ...
]).then(() => dispatch(success());

现在显然我无法对其进行硬编码,所以我想将我传递给 Promise.all 的数组映射。最简单的方法是什么?我尝试了箭头函数,返回匿名函数,但我似乎无法弄清楚。

【问题讨论】:

    标签: javascript reactjs ecmascript-6 promise es6-promise


    【解决方案1】:

    您可以使用Array.map,它将返回一组承诺。

    Promise.all(images.map((image) => dispatch(uploadImage(image))));

    更新评论

    const uploadImage = async() => {
      console.log("uploadImage");
    
      return Promise.resolve();
    };
    
    const dispatch = async() => {
      console.log("dispatch");
    
      return Promise.resolve();
    };
    
    const images = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    
    const imagesPromises = images.map((image) => {
      return () => dispatch(uploadImage(image));
    });
    
    Promise.all(imagesPromises.map((promise) => promise())); // Promises wont execute till this line. 

    【讨论】:

    • 我不确定这是否会执行调度函数而不是将它们添加到数组中,但不知道如何检查。
    • @TemporaryName,如果你想达到这个结果,你可以先创建一个返回承诺的函数数组,然后当你准备好执行时,你可以再次映射并返回并执行每个承诺,我已经添加了代码sn-p。
    • 你的名字 imagesPromises 有点误导,变量不包含承诺列表,而是返回承诺的函数列表
    • @Ferrybig 是的,你是对的,这绝对是误导。我的错!有什么建议吗?
    猜你喜欢
    • 2020-12-24
    • 2018-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    • 2015-11-13
    • 2019-10-12
    • 2015-05-07
    相关资源
    最近更新 更多