繁体   English   中英

我需要帮助在 Javascript 中使用双重承诺

[英]I need help in using double Promises in Javascript

这是我尝试过的代码。

  // To get base64 code of file
  const toBase64 = file => new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.readAsDataURL(file);
    reader.onloaded = () => resolve(reader.result.replace(/^data:.+;base64,/, ''));
    reader.onerror = error => reject(error);
  })

  // To make an array of files
  const getAttachments = async files => {
    let documents;
    try {
      documents = files.map(async file => {
        let base64 = await toBase64(file)
        return {
          doc: base64,
          documentName: file.name,
          documentType: file.type
        }
      })
    } catch {
      console.error('Failed to get files as base64')
    }
    return Promise.resolve(documents)
  }

我只是尝试通过使用上述 2 个函数来获取一个对象数组。 像下面这样;

getAttachments(Array.from(event.target.files)).then(documents => {
  console.info(documents)
}

但结果是

控制台中的注销结果

我很想知道我怎样才能得到我想要的。 谢谢。

尝试使用await关键字返回已解决的 promise 数组,而不是返回一组 promise。

尝试这个

const getAttachments = async files => {
  let documents;
  try {
    documents = files.map(async file => {
      let base64 = await toBase64(file)
      return {
        doc: base64,
        documentName: file.name,
        documentType: file.type
      }
    })
    
    return await Promise.all(documents);
  } catch {
    console.error('Failed to get files as base64')
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM