ExpressJS - 使用 Q
ExpressJS - Using Q
对于某条路线,我有以下代码:
router.get('/:id', function(req, res) {
var db = req.db;
var matches = db.get('matches');
var id = req.params.id;
matches.find({id: id}, function(err, obj){
if(!err) {
if(obj.length === 0) {
var games = Q.fcall(GetGames()).then(function(g) {
console.log("async back");
res.send(g);
}
, function(error) {
res.send(error);
});
}
...
});
函数GetGames
定义如下:
function GetGames() {
var url= "my-url";
request(url, function(error, response, body) {
if(!error) {
console.log("Returned with code "+ response.statusCode);
return new Q(body);
}
});
}
我正在使用 request
模块向我的 URL 发送带有适当参数等的 HTTP GET 请求
当我加载 /:id
时,我看到 "Returned with code 200" 已记录,但 "async back" 未记录。我也不确定是否正在发送响应。
一旦 GetGames
returns 某事,我希望能够在 /:id
的路由中使用返回的对象。我哪里错了?
因为 GetGames
是一个异步函数,将它写在 node.js 回调模式中:
function GetGames(callback) {
var url= "my-url";
request(url, function(error, response, body) {
if(!error) {
console.log("Returned with code "+ response.statusCode);
return callback(null,body)
}
return callback(error,body)
});
}
然后使用Q.nfcall
调用上面的函数并取回一个promise:
Q.nfcall(GetGames).then(function(g) {
})
.catch()
对于某条路线,我有以下代码:
router.get('/:id', function(req, res) {
var db = req.db;
var matches = db.get('matches');
var id = req.params.id;
matches.find({id: id}, function(err, obj){
if(!err) {
if(obj.length === 0) {
var games = Q.fcall(GetGames()).then(function(g) {
console.log("async back");
res.send(g);
}
, function(error) {
res.send(error);
});
}
...
});
函数GetGames
定义如下:
function GetGames() {
var url= "my-url";
request(url, function(error, response, body) {
if(!error) {
console.log("Returned with code "+ response.statusCode);
return new Q(body);
}
});
}
我正在使用 request
模块向我的 URL 发送带有适当参数等的 HTTP GET 请求
当我加载 /:id
时,我看到 "Returned with code 200" 已记录,但 "async back" 未记录。我也不确定是否正在发送响应。
一旦 GetGames
returns 某事,我希望能够在 /:id
的路由中使用返回的对象。我哪里错了?
因为 GetGames
是一个异步函数,将它写在 node.js 回调模式中:
function GetGames(callback) {
var url= "my-url";
request(url, function(error, response, body) {
if(!error) {
console.log("Returned with code "+ response.statusCode);
return callback(null,body)
}
return callback(error,body)
});
}
然后使用Q.nfcall
调用上面的函数并取回一个promise:
Q.nfcall(GetGames).then(function(g) {
})
.catch()