AngularJS には $qっていう promise の枠組みがあるので、使っておくといいこと (ビューが自動的に更新されるだけだけど) がある。フレームワーク組込みの仕組みがあるのに別途 Deferred の仕組み、しかも thenable(笑) じゃない(笑) JSDeferred を読むのもバカにされると思うので、以下のように JSDeferred から Angular $q へ置き換える方法を記す。
基本
JSDeferred における global な next() 関数を $q.when().then() に置き換え、Deferred#next を then() に置き換えればだいたい動く
next(function () {
alert(1);
return next(function () {
alert(2);
}).
next(function () {
alert(3);
});
}).
next(function () {
alert(4);
});
こういうのを、こう
$q.when().then(function () {
alert(1);
return $q.when().then(function () {
alert(2);
}).
then(function () {
alert(3);
});
}).
then(function () {
alert(4);
});
parallel() は?
$q.all() を使え
loop() は?
頑張って書く。いろいろやりかたはあると思うけど、例えばこう
$q.when().then(function () {
var list = [1, 2, 3], sum = 0;
return $q.when().then(function loop () {
if (list.length) {
return $q.when(list.shift()).then(function(item) {
console.log('item', item);
sum += item;
}).then(loop);
} else {
return sum;
}
});
}).
then(function (result) {
console.log(result);
});
wait() は?
setiTimeout で頑張って書く