我使用 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 函数的值没有定义?我如何传递我的解析值?谢谢!
最佳答案
您必须在异步回调中调用 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()
返回了一个 promise,您可以这样做并避免常见的延迟反模式:
function getLoc(x,y) {
return Q.ninvoke(request, 'get', { // ... other options here
}).spread(function(response, body) {
return body;
});
}
关于javascript - 使用 deferred.resolve(value) 返回到我的 .then() 的值未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36190413/