【问题标题】:Understanding Fetch() Javascript理解 Fetch() Javascript
【发布时间】:2025-12-23 19:00:11
【问题描述】:

我正在学习 javascript 教程,我需要一些帮助来理解以下函数中的模式:

get:  function(url) {
         return fetch(rootUrl + url, {
            headers: {
                'Authorization': 'Client-ID ' + apiKey
            }
        } )
        .then(
            function(response) {
                return response.json();
            }
        );
    }

我感到困惑的是,如果我们只关心 response.json(),那么返回 fetch() 有什么意义?

【问题讨论】:

    标签: javascript promise fetch-api


    【解决方案1】:

    returnfetch 用于将.then().catch() 链接到.get() 调用的能力,例如,

    obj.get(url).then(function(data) {
      console.log(data)
    })
    

    如果没有return 语句obj.get(url).then(handler) 可能会记录错误,如果对象没有名为then 的属性,其中值是处理从fetch 返回的Promise 的函数,其中没有从get 函数返回的值

    var objWithReturn = {
      get: function(url) {
        return Promise.resolve(url)
          .then(
            function(response) {
              return JSON.parse(response);
            }
          );
      }
    }
    
    objWithReturn.get('{"a":1}')
      .then(function(data) {
        console.log(data)
      })

    var objWithoutReturn = {
      get: function(url) {
        Promise.resolve(url)
          .then(
            function(response) {
              return JSON.parse(response);
            }
          );
      }
    }
    
    objWithoutReturn.get('{"a":1}')
      .then(function(data) {
        console.log(data)
      })

    【讨论】:

    • 第二个例子有错别字。应该是:objWithoutReturn
    【解决方案2】:

    它没有返回fetch()。当你编写像这样的链式函数调用时:

    return f1(args).f2(otherargs);
    

    相当于:

    var temp1 = f1(args);
    var temp2 = temp1.f2(otherargs);
    return temp2;
    

    所以你的函数可以写成:

    get: function(url) {
        var promise1 = fetch(rootUrl + url, {
            headers: {
                'Authorization': 'Client-ID ' + apiKey
            }
        });
        var promise2 = promise1.then(function(response) {
            return response.json();
        });
        return promise2;
    }
    

    现在您可以看到它返回了 Promise,当它完成时,从响应中返回 JSON。

    【讨论】: