主干Javascript:在运行另一个函数之前,等待函数完成

主干Javascript:在运行另一个函数之前,等待函数完成,javascript,jquery,backbone.js,asynchronous,Javascript,Jquery,Backbone.js,Asynchronous,我是Javascript新手,在阅读了几个示例之后,我仍然无法做到这一点。我知道我需要使用回调,但我的代码不起作用。这是我试过的 $(this.el).html(this.template(), { success: function() { return this.collection.each(this.appendEntry); } }); success甚至从未被调用过好吧,如果你想在异步任务完成后做点什么,你可以使用承诺。例如使用jQuery: $.when( myA

我是Javascript新手,在阅读了几个示例之后,我仍然无法做到这一点。我知道我需要使用回调,但我的代码不起作用。这是我试过的

$(this.el).html(this.template(), {
  success: function() {
    return this.collection.each(this.appendEntry);
  }
});

success
甚至从未被调用过

好吧,如果你想在异步任务完成后做点什么,你可以使用承诺。例如使用
jQuery

$.when( myAsyncTask() )
.then(function(){
  console.log("Executed when myAsyncTask() is done..");
});
如果您只想在成功获取集合数据时执行某些操作,请使用
Backbone.Collection.fetch()的
success()
回调方法

$(this.el).html()
(或者更简洁地说,
this.$el.html()
)是一个同步函数调用。在该函数完成之前,不会执行其他Javascript代码

this.$el.html(this.template());
this.collection.each(this.appendEntry);
将按顺序执行这两条语句


您是否碰巧以某种方式重写了下划线
template()
函数,在这种情况下
this.template()
已变成异步调用?如果是这样,您需要将回调支持添加到模板代码中,并将
html()
的执行推迟到它完成。

我知道
successful
Collections回调,但您知道此函数有任何此类方法
$(this.el).html(this.template())
。该函数有时在
@collection之前无法正确完成。每个(@appendEntry)
都会被调用。您确定不是您的模板方法没有给出正确的结果吗?在我看来,.html()是同步的template方法返回正确的模板,因为我在其中放置了一些伪
html
。但是随后会立即调用
appendentry
方法,并尝试将
追加
元素添加到该HTML中,但它不能,因为调用
appendentry
时未加载HTML
this.$el.html(this.template());
this.collection.each(this.appendEntry);