【问题标题】:Create an empty promise that just fulfills? [duplicate]创建一个刚刚实现的空头承诺? [复制]
【发布时间】:2016-06-28 21:57:53
【问题描述】:

我有一个包装器,它可以捕获承诺的最后结果,对其进行格式化并输出数据:

req.resolve = (promise) => {
    return promise.then(() => {
            res.json(req.user);
        }).catch(Sequelize.ValidationError, err => {
        // respond with validation errors
        return res.status(422).send(err.errors);
    }).catch(err => {
        // every other error
        return res.status(400).send({ message: err.message });
    });
};

在一个观点中,我没有任何承诺,所发生的只是 auth 函数触发器添加 req.user 并触发 done()

我尝试添加这样的承诺,但没有得到解决。

app.get('/user/me', auth,
    (req, res, next) => {
        req.resolve(new Promise());
    });

【问题讨论】:

  • 什么是req.resolve()不传参返回?
  • 它不返回任何东西,它向浏览器输出数据。它可以访问 express.js 使用的 req-object 中的一堆数据
  • return new Promise((success) => { success([]); })

标签: javascript node.js


【解决方案1】:

Promise 构造函数需要执行函数作为参数。将Promise.resolve() 替换为new Promise()

【讨论】:

  • 这可行,但我收到此警告:警告:在处理程序中创建了一个承诺,但没有从它返回
  • 尝试在return res.json(req.user); 中包含return 声明。嵌套 .catch() 函数的目的是什么?
  • 一个“空洞的承诺”是用英语说“谎言”的另一种方式。所以从语言的角度来看,有一个立即解决的承诺会更好;)
  • Promise.resolve() 为我工作!
  • new Promise 现在需要一个参数,请改用Promise.resolve()
猜你喜欢
  • 2014-02-21
  • 1970-01-01
  • 1970-01-01
  • 2013-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-17
  • 1970-01-01
相关资源
最近更新 更多