【问题标题】:Q async library with node.js带有 node.js 的 Q 异步库
【发布时间】:2014-03-20 12:35:41
【问题描述】:

我正在使用 Q 作为我的异步模块来开发 nodejs。以下调用了第一个函数,但之后没有任何内容,并且应用程序没有返回任何内容 - 它只是一直在等待。

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); });

我做错了什么?

【问题讨论】:

  • 您需要将函数传递给then()。试试.then(exports.postCreateUser(exports, user)) 左右。

标签: javascript node.js asynchronous promise q


【解决方案1】:

好的,我已经重建了您的问题。问题是 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

【讨论】:

  • 我仍然不确定为什么没有调用 export.postCreateUser 和 req.Login。
猜你喜欢
  • 2014-04-28
  • 2014-04-24
  • 1970-01-01
  • 2011-07-05
  • 2018-04-29
  • 1970-01-01
  • 2014-04-29
  • 2017-03-10
相关资源
最近更新 更多