shajara图解失败触发取消
中文

失败触发取消

失败触发的结构化取消

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。
sendEmailBatch 和 refreshAudience 都属于 sendCampaign scope。
sendEmailBatch 抛错后,branch 取消仍在 sleep 的 refreshAudience 和 sendCampaign。
branch 随后抛出 scope failure,launchCampaign 由此中断。