#
非同期完了Nodeライブラリは、さまざまな方法で非同期処理を扱います。最も一般的なパターンはエラーファーストコールバックですが、ストリーム、Promise、イベントエミッター、子プロセス、またはObservableに出会うかもしれません。Gulpタスクは、これらすべてのタイプの非同期処理を正規化します。
#
タスク完了の通知ストリーム、Promise、イベントエミッター、子プロセス、またはObservableがタスクから返されると、成功またはエラーは、続行するか終了するかをgulpに通知します。タスクがエラーになると、gulpはすぐに終了し、そのエラーを表示します。
series()
でタスクを構成する場合、エラーが発生すると構成が終了し、それ以上のタスクは実行されません。parallel()
でタスクを構成する場合、エラーが発生すると構成が終了しますが、他の並列タスクは完了する可能性があります。
#
ストリームを返す#
Promiseを返す#
イベントエミッターを返す#
子プロセスを返す#
Observableを返す#
エラーファーストコールバックの使用タスクから何も返されない場合、完了を知らせるためにエラーファーストコールバックを使用する必要があります。コールバックは、以下の例ではcb()
という名前で、タスクへの唯一の引数として渡されます。
エラーファーストコールバックを使用してタスクでエラーが発生したことを gulp に示すには、唯一の引数として Error
を指定して呼び出します。
ただし、多くの場合、このコールバックを自分で呼び出すのではなく、別の API に渡すことになります。
#
同期タスクは不可同期タスクはサポートされなくなりました。それらは、タスクからストリームを返すのを忘れるなど、デバッグが難しい微妙な間違いにつながることがよくありました。
「非同期完了のシグナルを忘れていませんか?」という警告が表示された場合、上記のいずれのテクニックも使用されていません。問題を解決するには、エラーファーストコールバックを使用するか、ストリーム、プロミス、イベントエミッター、子プロセス、またはオブザーバブルを返す必要があります。
#
async/await の使用上記のオプションのいずれも使用しない場合、タスクをasync
関数として定義できます。これにより、タスクがプロミスでラップされます。これにより、await
を使用してプロミスを同期的に操作し、他の同期コードを使用できます。