Javascript 使用带有承诺的Express.js端点

Javascript 使用带有承诺的Express.js端点,javascript,node.js,express,Javascript,Node.js,Express,我试图用承诺来表达,但我不能让它工作。 当我取消注释(1)时,我可以将response设置为200,但无论我在promise(2,3,4)中尝试设置为response,它总是返回401 我可以控制台。在中记录数据,然后这样承诺肯定会解决,但我相信401是发送的,因为函数不会等待承诺得到解决,对吗 我做错了什么,我怎样才能从承诺中得到回应 提前谢谢 app.get('/get_data', function (req, res) { //res.json(200, {}); return;

我试图用承诺来表达,但我不能让它工作。 当我取消注释
(1)
时,我可以将response设置为200,但无论我在promise
(2,3,4)
中尝试设置为response,它总是返回
401

我可以
控制台。在
中记录
数据
,然后
这样承诺肯定会解决,但我相信
401
是发送的,因为函数不会等待承诺得到解决,对吗

我做错了什么,我怎样才能从承诺中得到回应

提前谢谢

app.get('/get_data', function (req, res) {

  //res.json(200, {}); return; --> (1) gives expected 200 

  tree.getData(req.param('ids'))
     .then(function (data) { 
         // console.log('data'); --> (2) logs requested array of data
         //return res.json(200,{}); --> (3) gives 401
         return res.send(data); // --> (4) gives 401
     }).fail(function (err) {
         // never goes here
         console.log(err);
         return res.json(550, err);
     });
});

您需要在
tree.getData
之前添加一个return,以返回承诺及其结果。A+承诺具有
catch()
而不是
fail()

此外,在Express中设置状态代码时,您需要使用
res.status().send()
not
res.send(状态、数据)


是否应该是
.catch
而不是
.fail
?是否需要
401
来调用
.fail
方法?@JoshC。我希望能够从
然后
方法发送任何响应,但目前我无法发送,即使我在
然后
中设置了
200
,它也会忽略它(并转到
然后
)@JoshC。这是正确的。如果您使用的是“native”
Promise
s,则只有
app.get('/get_data', function (req, res) {

  return tree.getData(req.param('ids'))
     .then(function (data) { 
         return res.status(200).send(data)
     }).catch(function (err) {
         // never goes here
         console.log(err);
         return res.status(550).json(err);
     });
});