我正在使用javascript,当我推送项目时,数组返回0长度,并且记录为空,但是当我展开它时,它将显示它具有项目。
代码:
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)
答案 0 :(得分:0)
您创建的函数是异步的,但是调用它的主要代码却不是。您的i2
返回了一个promise,并且代码一直在运行。
您需要将日志记录命令放在与其结果关联的xarray
中,或者使外部功能异步,这基本上是同一件事。
另一个问题是,您正在循环等待诺言,这意味着您要等到第一个图像完成后才开始加载第二个图像,等等。更好的选择是创建一个诺言和将它们传递给asyncForEach
:
.then()
(一个警告是,如果其中一个上传失败,则promise将立即拒绝并打印到目前为止收集的结果,该结果可能为空。请注意,其余的上传仍将继续运行,因此仅会影响控制台输出。可以通过在Promise.all
之后添加Promise.all(image.map(imageUpload => RNFetchblob.fetch(...).then(...))
.then(() => console.log(images));
子句来避免,但要确保以某种方式通知自己该错误。)