以下代码在运行时, 第一个方法并没有把结果传递到第二个方法, 请问是什么问题?
var Q = require("q");
var getEmailBySessionId = function (mongo_client, redis_client, sid){
var deferred = Q.defer();
redis_client.get('s:' + sid, function(err, email) {
if (!err){
deferred.resolve({db : mongo_client, email : email});
}else{
deferred.reject({err_code: -1});
}
});
return deferred.promise;
};
var getUsersCount = function (data) {
var db = data['db'];
var deferred = Q.defer();
db.collection.count({}, {}, function(err, count){
if (!err){
data['count'] = count;
deferred.resolve(data);
}else{
deferred.reject({err_code : -2});
}
});
return deferred.promise;
});
getEmailBySessionId(mongo_client, redis_client, sid)
.then(getUsersCount)
.done(console.log, console.error);
回复 (6)
I
看文档吧,一般都是promise.resolve(xxx)
S
.then一般是,第一个参数是err, 第二个是你第一个方法执行的结果
B
用法没问题.
打印的结果是什么?
M
引用 bshy522用法没问题. 打印的结果是什么?
@bshy522 第二个方法获取的参数是空的: getUsersCount = function (data)中的 data是 [undefined undefined]
B
引用 moxiaomomo@bshy522 第二个方法获取的参数是空的: getUsersCount = function (data)中的 data是 [undefined undefined]
@moxiaomomo 你先确保你的程序别的方面没有出问题吧. 你的这个promise的用法是没错的..
M
引用 bshy522@moxiaomomo 你先确保你的程序别的方面没有出问题吧. 你的这个promise的用法是没错的..
@bshy522 谢谢, 应该是程序的问题。另外写了个demo,是正常的。
参与回复
登录后即可参与回复。登录