【问题标题】:Promises in the foreach loop (Typescript 2)foreach 循环中的承诺(Typescript 2)
【发布时间】:2017-02-13 23:22:27
【问题描述】:

我坚持使用承诺链,我需要在将图像上传到服务器后继续执行一些代码。它是 Angular2 和 Typescript。让我们写一些伪代码:

uploadImages(images):Promise<any> {
    return new Promise((resolve, reject) => {
        for (let image of images) {
            upload(image.type_1).on('upload_completed', (data) => {
                 // do something
            })

            upload(image.type_2).on('upload_completed', (data) => {
                 // do something
            })
    }
}

uploadImages(images).then(doSomethingElse);

我以这样的方式完成了这项任务,但我对承诺链有点困惑,我不知道如何在 foreach 循环中链接这个图像上传并将结果返回到新的承诺中所有上传都将完成。这样做的正确方法是什么?

编辑:循环中有基于事件的回调,如何将它们转换为 Promise.all()?

【问题讨论】:

  • @MikeMcCaughan,循环中有基于事件的回调
  • 所以,它们不是承诺?
  • 每次上传创建一个promise(通过在回调中解析promise),然后使用 Promise.all() 从所有单独的promise中创建一个全局promise。
  • @JBNizet 我像上面那样做了,得到“TypeError: Cannot read property 'length' of undefined”错误

标签: angular typescript promise


【解决方案1】:
uploadImages(images):Promise<any> {
    let promises_array:Array<any> = [];
    for (let image of images) {
        promises_array.push(new Promise(function(resolve,reject) {
            upload(image.type_1).on('upload_completed', (data) => {
                    resolve(true);
            })
        }));
        promises_array.push(new Promise(function(resolve,reject) {
            upload(image.type_2).on('upload_completed', (data) => {
                    resolve(true);
            })
        }));
    return Promise.all(promises_array);
}
uploadImages(images).then(doSomethingElse);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    • 2023-03-20
    • 1970-01-01
    • 2016-02-19
    相关资源
    最近更新 更多