Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(async): エラーファーストコールバック #509

Merged
merged 15 commits into from
Jun 30, 2018

Conversation

azu
Copy link
Collaborator

@azu azu commented Jun 29, 2018

#94

  • エラーファーストコールバックについて
  • Node.js
  • 詳細はユースケース: Node.jsでCLIアプリケーションを参照
  • 自分で定義して使ってみる

@bot-user
Copy link

bot-user commented Jun 29, 2018

Deploy preview for js-primer ready!

Built with commit 0445cff

https://deploy-preview-509--js-primer.netlify.com

}
});
// failtureTaskは失敗するため、`error`にはErrorオブジェクトが入る
callTaskAsync(successTask, (error, result) => {
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

このサンプルやっぱり長いなー。
2/3ぐらいにしたい…

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

s/successTask/failtureTask/では・・・?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

直します

setTimeout(() => {
try {
const result = task();
callback(null, result);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

これ一回result変数で受けているのはなんででしょう・・・?

Copy link
Collaborator Author

@azu azu Jun 30, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

特別な理由はないですが、resultという変数名で意味を説明したいのとインラインで書くと評価順が異なるため結果は同じですがやりたいことが異なるためですね。

callback(null, task());

このケースでは結果が同じになりますが、もし左辺に副作用があるものが存在していた場合に結果が異なる場合がありますね。(awaitを使うと実際そういうミスをしやすい。副作用があるかどうで書き方を変えるよりは、同じ書き方を取れる方を優先したいですね)

やりたいことはtask()の返り値をcallback に渡したいのであって、callbackを呼ぶためにtask() を実行するではないからですね。(いいたいこととしては、「まずtask()を評価する」ことが先にある点ですね)
短くかけますが余計なミスが発生する可能性もあるので、一時変数resultを作ったほうが誰が読んでも同じに読めると思えるからですね。

}
});
// failtureTaskは失敗するため、`error`にはErrorオブジェクトが入る
callTaskAsync(successTask, (error, result) => {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

s/successTask/failtureTask/では・・・?

@azu azu mentioned this pull request Jun 30, 2018
4 tasks
@azu azu merged commit b723f9b into master Jun 30, 2018
@azu azu deleted the error-first-callback branch June 30, 2018 23:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants