Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.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 按列表会导致一个项目始终被忽略_Javascript_Arrays_Object - Fatal编程技术网

Javascript 按列表会导致一个项目始终被忽略

Javascript 按列表会导致一个项目始终被忽略,javascript,arrays,object,Javascript,Arrays,Object,我尝试获取一个对象,在该对象中上载一个文件,获取下载的url并将其添加到该对象中,问题是每当我尝试将新数据推送到数组中时,我总是会丢失其中一个项,我不知道为什么会发生这种情况 我的代码: const transformedData = async () => { const urlList = []; for await (let dog of data.dogs) { // console.log(dog); if (dog.file.length === 0 |

我尝试获取一个对象,在该对象中上载一个文件,获取下载的url并将其添加到该对象中,问题是每当我尝试将新数据推送到数组中时,我总是会丢失其中一个项,我不知道为什么会发生这种情况

我的代码:

const transformedData = async () => {
  const urlList = [];
  for await (let dog of data.dogs) {
    // console.log(dog);
    if (dog.file.length === 0 || dog.file === undefined) {
     
      urlList.push({ ...dog, akcPapersUrl: "" });
    } else {
      
      const uploadTask = await storageRef
        .child(`dog/${dog.akcNumber}/${dog.file[0].name}`)
        .put(dog.file[0]);

      uploadTask.ref.getDownloadURL().then((res) => {
        urlList.push({ ...dog, akcPapersUrl: res });
      });
    }
  }
  console.log(urlList);
  return urlList;
};

await transformedData()
  .then((res) => {
    data = { ...data, transformed: res };
    return data;
  })
  .then((res) => {
    console.log(res);
    sendRegistration(res);
  });

您错过了
getDownloadURL
调用的
wait
,因此循环不会等待该承诺完成。使用:

const uploadTask = await storageRef
.child(`dog/${dog.akcNumber}/${dog.file[0].name}`)
.put(dog.file[0]);

const akcPapersUrl = await uploadTask.ref.getDownloadURL();
urlList.push({ ...dog, akcPapersUrl });

它只是碰巧错过了最后一个,因为在循环中有另一个
wait
(这可能是之前的
getDownloadURL
解决的足够时间)

我认为这并不能解决整个问题,但这是错误的:
dog.file.length==0 | | dog.file==undefined
。那项测试是倒退的
dog.file.length
在您有机会检查
dog.file===undefined
之前,可能会因异常而失败。