gpt4 book ai didi

node.js - promise 重发

转载 作者:搜寻专家 更新时间:2023-10-31 22:27:39 24 4
gpt4 key购买 nike

我不明白发生了什么......

使用 q promise ,这有效:

const deferred = q.defer();
deferred.resolve('Hellow');

const myPromise = deferred.promise;

router.get('/items', (req, res) => {
myPromise.then((result) => res.send(result));
});

但这不是,它让浏览器就像请求永远不会结束一样:

router.get('/items', (req, res) => {
myPromise.then(res.send);
});

怎么了?

最佳答案

下面是与res.send相关的express库的片段:

res.send = function send(body) {
var chunk = body;
var encoding;
var len;
var req = this.req;
var type;

// settings
var app = this.app;

// allow status / body
if (arguments.length === 2) {
// res.send(body, status) backwards compat
if (typeof arguments[0] !== 'number' && typeof arguments[1] === 'number') {
deprecate('res.send(body, status): Use res.status(status).send(body) instead');
this.statusCode = arguments[1];
} else {
deprecate('res.send(status, body): Use res.status(status).send(body) instead');
this.statusCode = arguments[0];
chunk = arguments[1];
}
}
//.....

如您所见,有很多this 引用。在你的情况下 myPromise.then(res.send) this 指的是 promise 对象,而不是 res,这就是为什么你的代码没有工作。

您可以使用 .bind 更改上下文方法,因此 this 将引用 res 对象:

router.get('/items', (req, res) => {
myPromise.then(res.send.bind(res));
});

关于node.js - promise 重发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38187342/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com