数组填充有4个项目,但长度为0

时间:2018-07-02 22:52:56

标签: javascript android ios arrays reactjs

我正在使用javascript,当我推送项目时,数组返回0长度,并且记录为空,但是当我展开它时,它将显示它具有项目。

the image

代码:

async function asyncForEach(array, callback) {
for (let index = 0; index < array.length; index++) {
  await callback(array[index], index, array)
}

}

            asyncForEach(image, imageUpload => {
            RNFetchblob.fetch('POST', SERVICE_URL + 'uploadImage.php', {
                Authorization : "Bearer access-token",
                otherHeader : "foo",
                'Content-Type' : 'multipart/form-data',
              }, [
                { name : 'image', filename : 'image.png', type:'image/png', data: imageUpload.data},
              ]).then((resp) => {
                const response = Object.values(resp)
                response.forEach(img => images.push(img))
              }).catch((err) => {

              })
            })
            console.log(images)

1 个答案:

答案 0 :(得分:0)

您创建的函数是异步的,但是调用它的主要代码却不是。您的i2返回了一个promise,并且代码一直在运行。

您需要将日志记录命令放在与其结果关联的xarray中,或者使外部功能异步,这基本上是同一件事。

另一个问题是,您正在循环等待诺言,这意味着您要等到第一个图像完成后才开始加载第二个图像,等等。更好的选择是创建一个诺言和将它们传递给asyncForEach

.then()

(一个警告是,如果其中一个上传失败,则promise将立即拒绝并打印到目前为止收集的结果,该结果可能为空。请注意,其余的上传仍将继续运行,因此仅会影响控制台输出。可以通过在Promise.all之后添加Promise.all(image.map(imageUpload => RNFetchblob.fetch(...).then(...)) .then(() => console.log(images)); 子句来避免,但要确保以某种方式通知自己该错误。)