Javascript Q带有node.js的异步库
我正在使用Q作为异步模块处理NodeJ。下面调用了第一个函数,但之后什么都没有,应用程序也没有返回任何东西——它只是一直在等待Javascript Q带有node.js的异步库,javascript,node.js,asynchronous,promise,q,Javascript,Node.js,Asynchronous,Promise,Q,我正在使用Q作为异步模块处理NodeJ。下面调用了第一个函数,但之后什么都没有,应用程序也没有返回任何东西——它只是一直在等待 return Q.ninvoke(exports, 'parseUser', req, null) .then(function(user) { console.log(1) }) .then(exports, 'postCreateUser', user) .then(function() { console.log(2); }) .t
return Q.ninvoke(exports, 'parseUser', req, null)
.then(function(user) { console.log(1) })
.then(exports, 'postCreateUser', user)
.then(function() { console.log(2); })
.then(req, 'login', user)
.then(function() { console.log(3); })
.then(function(user) { return res.redirect('/go'); })
.then(function() { console.log(4); })
.catch(function (err) { return exports.createValidationError(err, req, res, user); });
我做错了什么?好的,我已经重新构造了你的问题。问题是Q.ninvoke将回调传递给您正在调用的方法,您必须执行该回调才能继续承诺链
'use strict';
var Q = require('q');
var exports = module.exports;
var user = null;
exports.parseUser = function (req, nothing, cb) {
console.log('exports.parseUser', req);
console.log(arguments);
user = {}; //some object
cb(null, user);
};
exports.postCreateUser = function (user) {
console.log('exports.postCreateUser', user);
};
var req = {
login: function (user) {
console.log('req.login', user);
return user;
}
};
var res = {
redirect: function (route) {
console.log('res.redirect', route);
}
};
exports.createValidationError = function (err, req, res, user) {
console.log('exports.createValidationError', err, req, res, user);
};
return Q.ninvoke(exports, 'parseUser', req, null)
.then(function(user) { console.log(1); })
.then(exports, 'postCreateUser', user)
.then(function() { console.log(2); })
.then(req, 'login', user)
.then(function() { console.log(3); })
.then(function(user) { return res.redirect('/go'); })
.then(function() { console.log(4); })
.catch(function (err) { return exports.createValidationError(err, req, res, user); });
以及输出:
$ node q-example.js
exports.parseUser { login: [Function] }
{ '0': { login: [Function] }, '1': null, '2': [Function] }
1
2
3
res.redirect /go
4
我仍然不确定为什么没有调用exports.postCreateUser和req.Login。您需要将函数传递到
then()
。尝试。然后(exports.postreateuser(exports,user))
左右。