shajara流程图解失败触发取消
中文

失败触发取消

child scope 失败时,会先取消剩余工作,再让调用方收到 ScopeError。

branch(sendCampaign)spawn(sendEmailBatch)spawn(refreshAudience)launchCampaignpendingsendEmailBatchpendingrefreshAudiencependingsendCampaignpending
function* launchCampaign() {
  yield* branch(function* sendCampaign() {
    yield* spawn(function* sendEmailBatch() {
      yield* sleep(1000);
      throw new Error("email provider failed");
    });

    yield* spawn(function* refreshAudience() {
      yield* sleep(6000);
    });

    yield* sleep(6000);
  });
}
launchCampaign 调用 branch(...),进入 sendCampaign child scope。
sendCampaign scope 包含 sendCampaign、sendEmailBatch 和 refreshAudience。
sendEmailBatch 抛错时,sendCampaign scope 会取消仍在 sleep 的工作。
scope 关闭后,launchCampaign 会在 branch(...) 调用处收到 ScopeError。