Last active
September 29, 2018 14:35
-
-
Save fkfk/0f642e084333844421a1c409e248a56e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* fnBの前に実行したい処理 | |
* コールバックを引数として取る | |
**/ | |
function fnA (successCb, failedCb) { | |
let result = foo() | |
if (result) { | |
successCb(result) | |
} else { | |
failedCb(new Error('fnA error')) | |
} | |
} | |
/** | |
* fnAの後に実行したい処理 | |
* fnAの処理結果と、fnAの処理結果と関係ない値の2つ、及びコールバックを引数として取る | |
**/ | |
function fnB (arg1, arg2, successCb, failedCb) { | |
let result = bar(arg1, arg2) | |
if (result) { | |
successCb(result) | |
} else { | |
failedCb(new Error('fnB error')) | |
} | |
} | |
/** | |
* fnA, fnBをPromiseでラッピングしPromiseを返す | |
**/ | |
async function someFunction () { | |
let someArg = 'foo' // fnBに渡したい引数 | |
return new Promise((resolve1, reject1) => { | |
// fnAを実行 | |
// fnAにはコールバック関数としてresolve1, reject1を渡す | |
// fnAは処理が成功すればresolve1(), 失敗すればreject1()を実行する | |
fnA(resolve1, reject1) | |
}).then(result => { | |
// fnBを更にPromiseでラッピングする | |
return new Promise((resolve2, reject2) => { | |
// fnBを実行 | |
// fnAの処理結果、事前に定義したsomeArg、またコールバック関数としてresolve2, reject2を渡す | |
// fnBは処理が成功すればresolve2(), 失敗すればreject2()を実行する | |
fnB(result, someArg, resolve2, reject2) | |
}) | |
}) | |
} | |
// someFunction()が返すPromiseオブジェクトをさらにthen()でチェーンして処理を続ける | |
someFunction().then(r => { | |
console.log(r) | |
}).catch(e => { | |
// fnAまたはfnBでエラーが出た場合はこっちで処理する | |
console.error(e) | |
}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment