我有以下代码:
如果您想尝试解决这个问题,请点击这里进入 jsFiddle。
var User = {
get: function (options) {
var self = this;
$.ajax({
url: options.url,
success: function (data, response) {
self.nextPageUrl = data.pagination.next_page;
options.success(data, response);
}
});
},
nextPage: function (success) {
this.get({
url: this.nextPageUrl,
success: success
});
}
}
User.get({
url: 'https://cache.getchute.com/v2/albums/aus6kwrg/assets',
success: function (data, response) {
// Through `data.pagination.next_page` I can get the URL
// of the next page.
}
});
User.nextPage({
success: function (data, response) {
// Here I want to make the same request but using the next_page
// based on the next related to the previous' one.
}
});
问题
基本上,我想根据前置请求(User.get()
)执行nextPage()
操作,但由于其异步性,nextPage()
方法不知道this.nextPageUrl
属性——它会返回预期的undefined
。
最后,问题是:有人能想出一种方法来保持当前语法流程,但解决这个问题吗?实际上,有办法吗?
不,我不能使用同步请求。
常识
我想使用事件机制来处理这个问题:当请求被发出并调用.nextPage()
时,尝试监听一个事件,让它在x秒内被触发,然后我希望this.nextPageUrl
属性在该基于事件的范围内可用。
你们觉得呢?
免责声明:next_page
的逻辑是由服务器预处理的,然后才发送到客户端。我没有使用增量/减量行为操作的选项。
如果您想尝试解决这个问题,请点击这里进入 jsFiddle。
get
返回一个 Promise 并使用结果调用nextPage
。实际上,如果你只是返回那个$.ajax
请求,那就是一个 Promise。 - Evan Davisthis.nextPageUrl
上。this
指向的不是User。如果你使用User.nextPageUrl
,就可以在回调范围之外访问它。 - Lim H.