gpt4 book ai didi

javascript - 使用 deferred.resolve(value) 返回到我的 .then() 的值未定义

转载 作者:行者123 更新时间:2023-11-30 12:02:56 24 4
gpt4 key购买 nike

我使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com