我使用Q.js在我的主函数
中调用api使用两个循环 for i..10
for i...5
var promise = getLoc(x,y);
promise.then(function(value) {
//value is undefined...
}
在我的getLoc函数中,我有
function getLoc(x,y) {
var value;
var deferred = Q.defer();
Q.ninvoke(request, 'get', {
}).spread(function(response, body) {
value = body;
});
defferred.resolve(value);
return deferred.promise
}
为什么传递给then函数的值没有定义?我如何通过我的解决价值?谢谢!
答案 0 :(得分:3)
您必须在异步回调中调用resolve()
,因为将来某个时候会调用该回调,因此这是该值唯一已知的位置:
function getLoc(x,y) {
var deferred = Q.defer();
Q.ninvoke(request, 'get', { // ... other options here
}).spread(function(response, body) {
deferred.resolve(body);
});
return deferred.promise;
}
您试图在异步回调被调用之前返回该值,因此始终是undefined
。
或者,因为Q.ninvoke()
似乎返回了一个承诺,你可以这样做并避免使用常见的延迟反模式:
function getLoc(x,y) {
return Q.ninvoke(request, 'get', { // ... other options here
}).spread(function(response, body) {
return body;
});
}