服务顺序-如果第二次失败,请不要在下次用户点击时再次调用第一项服务

时间:2018-07-26 07:43:16

标签: javascript angular rxjs

寻求帮助。我是Angular + RxJS的初学者,如果这很容易,请不要怪我。

想法是提交具有许多输入字段的表单,其中之一是图像上载。 当用户单击“提交”按钮时,首先需要调用添加了文件的POST / attachments服务来获取其令牌。当此服务返回附件的令牌时,则需要在我发送所有表单数据的最终服务调用中使用它。

特殊情况是,如果用户提交表单,则第一个带有附件令牌的服务响应失败,而第二个失败,则当用户再次单击“提交”按钮一次时,不应再次调用/ attachments服务,而仅使用先前获得的附件令牌并调用表单的POST服务。

使用某些RxJS运算符或其他功能是否可能? 我知道我可以在我的应用程序中使用一些丑陋的逻辑来使它工作,但我也想使其变得更漂亮。

这是我提交功能的第一版代码。

public submitForm(finalData) {
  const { attachment, ...data } = finalData;

  return this.http
    // at first get attachment's token
    .post('/attachments', attachment)
    .pipe(
      switchMap((attachmentToken) => {
        const formData = {
          data,
          attachment: attachmentToken
        };

        // submit form data
        return this.http.post('/submitformdata', formData)
      }),
    );
}

1 个答案:

答案 0 :(得分:1)

您应该存储附件令牌并基于该令牌进行请求:

console.log(String([1,2]));   // '1,2' (of type string)
console.log(String([2]));     // '2' (of type string)
console.log(Number('1,2'));   // NaN (of type number)
console.log(Number('2'));     // 2 (of type number)