【问题标题】:Promise.all returning promise for array of promises, but returning correct value for single promisePromise.all 返回承诺数组的承诺,但返回单个承诺的正确值
【发布时间】:2019-08-12 18:04:51
【问题描述】:

我正在使用 Promise 从存储中读取文件并转换为 base64 字符串。 我有图像数组,使用 RNFS 读取图像

const promise_Images = _Images.map(async (nOPImg) => {

                    //get base 64 image
                    let image = await RNFS.readFile(nOPImg.photourl, 'base64')
                    nOPImg.photo = image

                   return nOPImg
                }

        })

const promise_Images2 = _Images.map(async (nOPImg) => {

                    //get base 64 image
                    let image = await RNFS.readFile(nOPImg.photourl, 'base64')
                    nOPImg.photo = image

                   return nOPImg
                }

        })

现在,如果我只使用一个 promise 并返回正确的输出

Promise.all(promise_Images ).then(res => {
                console.log("Image List", res)

                })

但是如果我一次执行所有的承诺,它就会返回承诺

 Promise.all(promise_Images1, promise_Images2  ).then(res => {
                console.log("Image List", res)

                })

结果

0: Promise {_40: 1, _65: 1, _55: "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDABALDA4MChAODQ4SER…RQAUUUUAFFFFABQKKKACiiigAooooAKKKKACiiigAooooA//Z", _72: null}
1: Promise {_40: 1, _65: 1, _55: "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDABALDA4MChAODQ4SER…FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/Z", _72: null}
2: Promise {_40: 1, _65: 1, _55: undefined, _72: null}
3: Promise {_40: 1, _65: 1, _55: undefined, _72: null}

我怎样才能在这里返回 base64 字符串?

【问题讨论】:

    标签: javascript reactjs react-native promise


    【解决方案1】:

    但是如果我一次性执行所有的承诺,它就会返回承诺

    Promise.all 接受 one 参数:它应该使用的承诺数组。你传递给它两个参数。它忽略了第二个。

    如果promise_Images1 和promise_Images2 都是数组,则合并它们:

    Promise.all([...promise_Images1, ...promise_Images2]).then(res => {
        // ...
    })
    

    【讨论】:

    • 这工作得很好。但是我能知道这两个函数有什么区别吗 Promise.all([...promise_Images1, ...promise_Images2]).then(res => { // ... }) 和 Promise.all([promise_Images1, promise_Images2]).then(res => { // ... }) 谢谢。
    • @Sk。 - [...promise_Images1, ...promise_Images2] 创建一个数组,其中包含来自promise_Images1 和promise_Images2 的所有条目。 [promise_Images1, promise_Images2] 创建一个包含两个条目的数组:数组promise_Images1 和数组promise_Images2。 (类似于二维数组,)Promise.all 不会等待 promise_Images1 和 promise_Images2 中的任何承诺,因为它不会看到它们,它只会用一个数组几乎立即解决它的承诺这些数组。
    猜你喜欢
    • 1970-01-01
    • 2015-06-05
    • 2016-06-15
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    相关资源
    最近更新 更多