我不明白发生了什么......
使用qpromises,这有效:
const deferred = q.defer();
deferred.resolve('Hellow');
const myPromise = deferred.promise;
router.get('/items', (req, res) => {
myPromise.then((result) => res.send(result));
});
Run Code Online (Sandbox Code Playgroud)
但事实并非如此,如果请求永远不会结束,它会保持浏览器的状态:
router.get('/items', (req, res) => {
myPromise.then(res.send);
});
Run Code Online (Sandbox Code Playgroud)
怎么了?
Eng*_*eer 13
以下是与以下内容express相关的图书馆片段res.send:
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];
}
}
//.....
Run Code Online (Sandbox Code Playgroud)
如您所见,有很多this参考资料.在你的情况下myPromise.then(res.send),this引用promise对象,而不是res,这就是你的代码不起作用的原因.
您可以使用.bind方法更改上下文,因此this将引用res对象:
router.get('/items', (req, res) => {
myPromise.then(res.send.bind(res));
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5385 次 |
| 最近记录: |