Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 数组中填充了4项,但长度为0_Javascript_Android_Ios_Arrays_Reactjs - Fatal编程技术网

Javascript 数组中填充了4项,但长度为0

Javascript 数组中填充了4项,但长度为0,javascript,android,ios,arrays,reactjs,Javascript,Android,Ios,Arrays,Reactjs,我使用的是javascript,当我推送项目时,数组返回0长度,它记录为空,但当我展开它时,它将显示它有项目 守则: async function asyncForEach(array, callback) { for (let index = 0; index < array.length; index++) { await callback(array[index], index, array) } 您创建的函数是异步的,但调用它的主代码不是。您的asyncForEach返回一

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

守则:

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

您创建的函数是异步的,但调用它的主代码不是。您的
asyncForEach
返回一个承诺,并且代码继续运行

您需要将日志记录命令放入一个
.then()
,并附加到它的结果中,或者使您的外部功能异步,这基本上是一样的

另一个问题是,您正在循环中等待承诺,这意味着您在第一个映像完成之前不会开始加载第二个映像,等等。更好的选择是创建一个承诺数组并将其传递给
承诺。所有

Promise.all(image.map(imageUpload => RNFetchblob.fetch(...).then(...))
  .then(() => console.log(images));

(一个警告是,如果其中一个上传失败,承诺将立即拒绝并打印到目前为止收集的结果,结果可能为空。请注意,剩余的上传仍将继续运行,因此它只会影响控制台输出。可以通过在
之后添加
.catch
子句来避免,但请确保通知不知何故,您自己也意识到了这个错误。)

@Taplar已编辑!您在数组填充项之前很久就记录了它。我还建议您查看
Promise.all()
@ChrisG我试过了,但没用。@ChrisG我的建议是:谢谢你,但它不再是异步的,我尝试做的是上传图像,获取图像名称,然后用通过数组传递的图像名称将项目添加到数据库中,它仍然是异步的c、 使用
async
/
await
只是承诺的替代语法,逻辑仍然是一样的。第二行应该是
。然后(images=>console.log(images));
它同时启动所有上载(或者一次启动几个,取决于浏览器决定如何执行)并在上传完成时填充数组。除了同步部分之外,它与您的原始代码相同-假设您实际上不需要出于任何原因将其按顺序进行。哦,如果其中一次上传失败,它将立即打印数组,您可以在
之后添加
catch
,然后
以避免这种情况。
Promise.all(image.map(imageUpload => RNFetchblob.fetch(...).then(...))
  .then(() => console.log(images));