Firebase函数即使等待也不会等待异步代码

时间:2020-08-21 20:45:04

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

我有一个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()语句为什么不能正确执行,以及在完成之后如何执行之后的代码?

1 个答案:

答案 0 :(得分:2)

您可以将函数调用包装在promise周围:

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');