Skip to content

Instantly share code, notes, and snippets.

@fkfk
Last active September 29, 2018 14:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fkfk/0f642e084333844421a1c409e248a56e to your computer and use it in GitHub Desktop.
Save fkfk/0f642e084333844421a1c409e248a56e to your computer and use it in GitHub Desktop.
/**
* 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