前提・実現したいこと
以下のコードを読み解くことができません。
特に、sequenceTasks関数の中で行われている
return promise.then(task).then(pushValue)
がよく分かりません。
thenの引数に指定されたpushValue関数の引数にはresultsとvalueがありますが、
どこでそれが渡っているのでしょうか。
該当のソースコード
javascript
1function sequenceTasks(tasks) { 2 function recordValue(results, value) { 3 results.push(value); 4 return results; 5 } 6 var pushValue = recordValue.bind(null, []); 7 return tasks.reduce(function (promise, task) { 8 return promise.then(task).then(pushValue); 9 }, Promise.resolve()); 10} 11 12var promises = { 13 doTaskA: function() { 14 return taskA().then(); 15 }, 16 doTaskB: function() { 17 return taskB(value).then(); 18 } 19}; 20 21function taskA() { 22 return new Promise(function(resolve, reject) { 23 setTimeout(function () { 24 console.log('taskA'); 25 resolve('taskA death'); 26 }, 16); 27 }); 28} 29 30function taskB(value) { 31 return new Promise(function(resolve, reject) { 32 setTimeout(function () { 33 console.log(value); 34 console.log('taskB'); 35 resolve('taskB death'); 36 }, 1); 37 }); 38} 39 40function main() { 41 return sequenceTasks([promises.doTaskA, promises.doTaskB]); 42} 43 44main().then(function(value) { 45 console.log('then'); 46 console.log(value); 47// taskAもしくはtaskBでエラーの場合に呼び出される 48}).catch(function(error) { 49 console.log(error); 50});
試したこと
引用したコードが掲載されているサイト(https://qiita.com/toshihirock/items/e49b66f8685a8510bd76)
のほか、
https://qiita.com/toshihirock/items/e49b66f8685a8510bd76
https://rightcode.co.jp/blog/information-technology/javascript-async-await
などを見てみました。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/19 06:25
2020/02/19 10:03 編集