微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在不使用异步等待的情况下等待 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 举报,一经查实,本站将立刻删除。