首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套$.when .then()s

嵌套$.when .then()s
EN

Stack Overflow用户
提问于 2016-03-20 14:26:08
回答 1查看 31关注 0票数 0

在页面加载时,12个具有data-id属性的项被推入数组showcaseIds中。

代码语言:javascript
复制
function pushShowcaseIds () {

  showcaseIds = [];

  $("[data-id]").each(function () {
    showcaseIds.push($(this).attr("data-id"));
  });

}

pushShowcaseIds(); // run on load

如果用户已经遍历了数组中的所有项(所有12个项),例如currentItemId为null,我希望加载更多的项,等待ajax调用完成,完成后将页面上的所有新ID推入数组中,然后允许用户继续。

代码语言:javascript
复制
$("body").keydown(function(e) {

  index = showcaseIds.indexOf(currentItemId);
  cacheCurrent = currentItemId;

  if (e.keyCode == 37 || e.keyCode == 39){
      if(e.keyCode == 39) { // right
        currentItemId = showcaseIds[index + 1];
        if (currentItemId == null){
          $.when(
            loadMore()
          ).then(function(){
            index = showcaseIds.indexOf(cacheCurrent);
            currentItemId = showcaseIds[index + 1]; // undefined
          });
        } else {
          // continue as normal
        }
      }
  }
});

function loadMore () {
  $.when(
    $.ajax({
        // 
    })
  ).then(function(){
    pushShowcaseIds();
  });
}

但是,在调用loadMore()函数之后,$.when.then中的currentItemId是未定义的,当我对其进行alert时,它会立即出现。

因此,我想then()似乎正在立即运行,而不是等待ajax调用完成。我认为这与“嵌套”的$.when ()有关,但我不确定。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-20 14:46:19

您只是忘了在loadMore中返回表达式

代码语言:javascript
复制
function loadMore () {
  return $.when(
    $.ajax({
        // 
    })
  ).then(function(){
    pushShowcaseIds();
  });
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36114931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档