【发布时间】:2015-07-22 22:17:41
【问题描述】:
我在一个场景中,我必须按顺序从服务器获取数据,我想在 Promises 的帮助下做到这一点。这是我迄今为止尝试过的:
function getDataFromServer() {
return new Promise(function(resolve, reject) {
var result = [];
(function fetchData(nextPageToken) {
server.getData(nextPageToken).then(function(response) {
result.push(response.data);
if (response.nextPageToken) {
fetchData(response.nextPageToken);
} else {
resolve(result);
}
});
})(null);
});
}
getDataFromServer().then(function(result) {
console.log(result);
});
第一次获取成功,但对server.getData() 的后续调用没有运行。我认为这与第一个 then() 未完成有关。我应该如何缓解这个问题?
【问题讨论】:
-
所以,console.log(result);不被调用/不打印任何东西?
-
@Joel 没错。如果我要在
getData().then()中登录,我只会得到第一部分的响应,而不是后续的。 -
代码看起来应该可以工作。尝试在对“then”的调用中添加第二个函数来处理错误情况(至少现在记录错误)。我怀疑对 server.getData 的第二次调用静默失败。无论如何,您可能需要处理这些类型的错误。
-
第一个“response.nextPageToken”是什么?可能是 0 吗?在什么情况下,它会立即停止? (但这意味着承诺已经解决,你说的不是);我在这里尝试了类似的代码gist.github.com/jotak/1db63cb48f90e86dca74 并且效果很好,所以问题可能出在服务器端
-
@Nimrand 确实失败了 :) 还不习惯捕获所有 Promise!非常感谢。
标签: javascript asynchronous promise