【问题标题】:Trying to make a function asynchronous to perform an action only after uploading data仅在上传数据后尝试使函数异步执行操作
【发布时间】:2022-01-20 18:17:03
【问题描述】:

编辑在底部添加问题: 这目前可以正常运行,除了它没有异步运行(我认为这是异步等待尝试)。

我的问题是如何使提交流程异步,以便我可以仅在上传信息后执行操作(在这种情况下提示用户首选后续步骤)。

 const handleSubmit = async () => {
  
  try {
    if (image.value) {
      await uploadImage(image.value); <--I thought this was 
        asynchronous, but I tested and I don't think it is. 
    }

    const colRef = collection(db, "collection");

    //I thought the below was asynchronous, but it's not
    await addDoc(colRef, 
       {
      data: data.value <--placeholder
     
    });
    
      });
  } catch {

  }

  //code to run after addDoc is done, but it runs immediately
  $q.dialog({
      [content]
    })
};

更新:我已经用 .then 函数更改了 addDoc 函数,这似乎有效。当前的问题是我无法在运行 addDoc 函数之前完成 uploadImage 函数。

这是我对uploadImage函数的承诺,我知道这是草率和错误的:

 if (image.value) {
          return new Promise((resolve, reject) => {
            const newImage = uploadImage(image.value);
            resolve(newImage);
          });
        } else {
          console.log("error");
        }

【问题讨论】:

    标签: javascript vue.js google-cloud-firestore


    【解决方案1】:

    您尝试使用的 async/await 方法只有在您的 uploadImage()addDoc() 函数返回 JavaScript Promises 时才能按预期工作。

    有关更多信息,请参阅来自 nodejs.dev 的 this article async/await。

    【讨论】:

    • 好的,谢谢。这是有用的信息。我的印象是 addDoc(firebase 函数)正在返回一个承诺。
    • 不客气。
    猜你喜欢
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-23
    • 1970-01-01
    • 2015-07-19
    • 2019-08-05
    相关资源
    最近更新 更多