在不使用异步等待的情况下等待 API 调用调用完成后需要维护一个用户发起的执行上下文

问题描述

我被严重困在这里,我正在设置 ApplePay,它需要用户发起的事件来创建 AppleSession,但我需要在此之前进行一系列 API 调用,不幸的是,由于业务规则,它们只能发生一旦用户点击结帐。

所以流程是调用 checkout 方法,在该方法中,我们在调用 process 操作时执行 await,然后如果它成功,我们将初始化 ApplePay。看起来像这样。

checkout( event ) {
    await this.processpayments();
    this.checkoutAP();
}

这失败了,来自 ApplePay 的一个错误,它需要一个用户启动的事件来创建一个 ApplePaySession。 await 返回一个 promise 并将其后的任何代码包装在它的 .then 中。因此,对 checkoutAP 的调用在其堆栈/上下文中不再有用户发起的事件。所以它失败了。

我尝试使用 setInterval 并检查状态值,一旦进程调用完成,它将被更新。代码不会等待 setInterval ,除非您将其包装在 Promise 中,这让我又回到了同样的问题。

这是我目前无法使用的乱七八糟的东西。

    await this.processAmenityPayments(this.getPaymentList()).then(( result ) => {
      this.paymentsProcessstatus = PAYMENTS_PROCESS_STATUS_COMPLETE;
    },( error ) => {
      this.paymentsProcessstatus = PAYMENTS_PROCESS_STATUS_ERROR;
      this.errors.push(error);
    });

    let intervalCount = 0;
    const interval = setInterval(()=> {
      if( this.paymentsProcessstatus === PAYMENTS_PROCESS_STATUS_COMPLETE || this.paymentsProcessstatus === PAYMENTS_PROCESS_STATUS_ERROR) {
        clearInterval(interval);
        // I can't put it here,it's a different context and fails. 
      }
      intervalCount++;
      if( intervalCount > 20 ) {
        clearInterval(interval);
        return null;
      }
    },1000 );

    // my hope is i can wait for the mess to run above,once the state has been updated then 
    // allow the code to continue at this point. 
    this.continueCheckout();

任何想法,无论多么笨拙都会受到欢迎。

谢谢各位!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)