【问题标题】:Can I use fs promise API without then() or await? [duplicate]我可以在没有 then() 或 await 的情况下使用 fs promise API 吗? [复制]
【发布时间】:2020-09-20 21:38:04
【问题描述】:

我正在编写一个快速的网络应用程序

我需要将 post 请求的主体写入磁盘,但返回的 promise 对我没有用。

是否需要等待或附加 then 函数到返回的承诺?

import { promises as fs } from 'fs';
import express from 'express';

const app = express();

app.post('/', (req, res) => {
  fs.writeFile(`record/${req.body.name}.json`, JSON.stringify(req.body));
  res.send(`Hello World`);
});

app.listen(8080);

【问题讨论】:

  • 完全没有,因为您的回应并不依赖于承诺的兑现。
  • 您不必等待Promiseresolvereject,但是,您应该处理错误情况并将其返回给调用者,而不是让它感觉像所有请求成功。
  • 只有在需要处理错误时才需要
  • 顺便说一句,即使您不需要 .catch 处理程序,您也至少应该拥有它 - 未处理的 Promise 拒绝会导致问题并破坏您的应用程序。

标签: javascript node.js promise fs


【解决方案1】:

不,你不必对返回的 Promise 做任何事情,就像每个非异步函数一样,即使你忽略返回值,它也会被执行,但是你必须记住一些事情:

如果您不等待 promise 解决或拒绝,则以下操作,例如您的 res.send('Hello World'); 很可能会在异步操作完成之前执行。这是否存在问题取决于您的应用程序。

如果您没有 catch 块,您也无法处理异步函数中可能发生的异常,因此您的整个应用程序可能会在遇到未处理的异常时崩溃。

【讨论】:

    猜你喜欢
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 2015-08-20
    • 2016-11-07
    • 2013-08-01
    • 2016-01-25
    • 2017-12-31
    相关资源
    最近更新 更多