【问题标题】:How to perform a redirect inside a Promise inside a fetch()如何在 fetch() 中的 Promise 中执行重定向
【发布时间】:2017-11-09 17:46:09
【问题描述】:

这是在 Promise 中重定向的正确方法吗?这会造成任何不利影响吗?可能内存泄漏?

      .then(function (response ){
            if( response.redirected){
              location.href = response.url;
            }
            return response.json();
        })
        .then(function (record) {
            console.log("record update:",record);
                onRecordUpdate(record);
        })

【问题讨论】:

  • 它不会导致内存泄漏,因为您正在加载一个新页面,该页面将丢弃当前页面状态。
  • 我看不出这在承诺中或其他地方有什么不同
  • 在重定向点,是否会破坏链并解析最后一个存在的 Promise?

标签: redirect ecmascript-6 promise fetch es6-promise


【解决方案1】:
    .then(function (response ){
      if( response.redirected){
        location.href = response.url;
      }
      return response.json();
    })
    .then(function (record) {
      console.log("record update:",record);
      onRecordUpdate(record);
    })

基本上,它不会运行位置更改后的代码。有时,如果浏览器变慢,它可以工作,但理论上它不应该工作。所以我认为您应该在位置更改之前运行 onRecordUpdate(record) 函数以避免任何静默错误。

正如@nils 所说,您不会遇到任何内存泄漏,因为它会刷新页面并清除状态。

【讨论】:

    猜你喜欢
    • 2016-06-30
    • 1970-01-01
    • 2020-02-23
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多