どのように私はループから抜け出すん。この例ループ内で一連の非同期操作を中断する方法はありますか?
Dojo FAQ: How can I sequence asynchronous operations?
function doNext(previousValue) {
var dfd = new Deferred();
// perform some async logic; resolve the promise
setTimeout(function() {
var next = String.fromCharCode(previousValue.charCodeAt(previousValue.length - 1) + 1);
dfd.resolve(previousValue + next);
}, 50);
return dfd.promise;
}
var promise = doNext('a');
for (var i = 0; i < 9; i++) {
promise = promise.then(doNext);
}
promise.then(function (finalResult) {
// 'doNext' will have been invoked 10 times, each
// invocation only occurring after the previous one completed
// 'finalResult' will be the value returned
// by the last invocation of 'doNext': 'abcdefghijk'
console.log(finalResult);
});
に続いて - doNextが一定の基準を満たしたときに、その後のdoNextの関数呼び出し処理を停止すなわち - 例えば、停止のために次の文字がD」のとき'と計算された値をその時点まで返しますか?
編集:これまで、遅延キャンセル()メソッドを使用しましたが、プロセスを強制終了して何も返しません。
setTimeout(function() {
var next = String.fromCharCode(previousValue.charCodeAt(previousValue.length - 1) + 1);
if(previousValue + next == 'abc')
dfd.cancel('abc');
else
dfd.resolve(previousValue + next);
}, 50);
は、私はあなたの例をしようとしていたが、二つの質問1) - 「とき」とは何ですか? 2)コードをステップ実行して、最終結果をコンソールに書き込むことはありません。 – erotavlas
['when'](https://dojotoolkit.org/reference-guide/1.10/dojo/when.html)は、[' Promise.resolve'](https://developer.mozilla .org/ja-jp/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve)。最終的な結果に関しては、コードをテストしていませんが(もちろん、私が 'i'を渡すのを忘れたことに気がついたのですが)、確かにすべきです。 – Bergi