私はいくつかのデータを取得する関数を持っており、関数は約束を返さなければなりません。この機能では、2つの要求を1つずつ行う必要があります。私は最後の呼び出しであるresolves
が遅延機能で返ってくる入れ子の延期呼び出しで終わった。私は、この遅延されたものには新しく、これが適切な解決策であるかどうか疑問に思います。入れ子になったjqueryの遅延呼び出しを処理する方法
function getData(func) {
var model = new Model();
var collection = new Collection();
var dfd = new jQuery.Deferred();
collection.fetch().then(function() {
model.fetch().then(function() {
dfd.resolve(collection);
});
});
return dfd.then(function (collection) {
return getViews(func(collection), model);
});
}
。どちらのコードも.then()コールバック内のgetViews()を返します。概念的には、getData()関数が遅延された.then()を返し、getView()は遅延していないことを理解することが重要です。 getViews()を返すことはここで何もしません。追加の.then()呼び出しのように、このgetData()を使用する他のコードがある場合、getViewが完了することは保証されません。あなたはそれが始まったことだけが保証されます。問題を参照してください?知っているだけのこと。 – jcbelanger
'$ .when()。done()'をここに返すのでしょうか? –
@ cereal77killer、 "getViews()はここで何もしていない"というあなたの主張は(jQuery 1.8から)間違っています。内側の 'return'は、' getData() 'によって返される約束があなたが望むように振る舞うように明示的に含まれています。つまり、 'getData()'によって返される約束に '.then()'を連鎖させる場合、 'getViews()'が完全であることが保証されます**。あなたが私を信じていない場合、「as of jQuery 1.8」[ここ](http://api.jquery.com/deferred.then/)から始まる段落を読んでください。 '.done()'を使うと、あなたが避けようとしている振る舞いを正しく与えることができます。 –