【问题标题】:Firebase functions not waiting for asynchronous code even with await即使使用 await,Firebase 函数也不会等待异步代码
【发布时间】:2020-08-21 20:45:04
【问题描述】:

我有一个将文件写入 firebase 存储的 firebase 函数:

var tempJSONObject = {
  testing: "why are we testing",
  anothertest: "constanttesting"
}
try {
  const fileName = `storedjokes/81.json`
  const file = bucket.file(fileName);
  console.log('created file');
  const writeStream = fs.createWriteStream(JSON.stringify(file));
  console.log('created write stream');
  var stringy = JSON.stringify(tempJSONObject);
  console.log("stringy created");
  await writeStream.write(stringy, (err) => {
    console.log("writing started");
    if (err) {
      console.log(err.message);
    } else {
      console.log("data written");
    }
  });
} catch (e) {
  console.log('error', e);
}
console.log('post write');

代码执行正常,但控制台打印

写后

从不打印

开始写

为什么 .write() 语句没有正确执行,它之后的代码怎么可能在它完成之前执行?

【问题讨论】:

  • writeStream.write 不返回承诺,因此 await 不会做任何事情来暂停代码。
  • 那我怎么暂停呢?
  • 如果这是您的实际问题,那么我建议您编辑问题以更好地解释您的目标。严格来说,我已经回答了你关于为什么写入没有按你期望的方式工作的问题。我还建议显示整个函数,而不仅仅是其中的代码行。

标签: javascript node.js firebase google-cloud-functions google-cloud-storage


【解决方案1】:

您可以将函数调用包装在一个承诺周围:

var tempJSONObject = {
  testing: "why are we testing",
  anothertest: "constanttesting"
}
try {
  const fileName = `storedjokes/81.json`
  const file = bucket.file(fileName);
  console.log('created file');
  const writeStream = fs.createWriteStream(JSON.stringify(file));
  console.log('created write stream');
  var stringy = JSON.stringify(tempJSONObject);
  console.log("stringy created");
  await new Promise(resolve => {
    writeStream.write(stringy, (err) => {
      console.log("writing started");
      if (err) {
        console.log(err.message);
      } else {
        console.log("data written");
      }
      resolve();
    });
  });
} catch (e) {
  console.log('error', e);
}
console.log('post write');

【讨论】:

    猜你喜欢
    • 2020-12-23
    • 2019-12-04
    • 2021-04-18
    • 2021-08-15
    • 2020-10-26
    • 2018-09-17
    • 2021-02-21
    • 2020-12-23
    • 2021-01-06
    相关资源
    最近更新 更多