如何在 Fetch 的承诺链之外获取响应数据? [复制]

Posted

技术标签:

【中文标题】如何在 Fetch 的承诺链之外获取响应数据? [复制]【英文标题】:How to get response data outside promise chain of Fetch? [duplicate] 【发布时间】:2017-05-06 22:45:36 【问题描述】:

我正在使用 fetchApi 从我的 API 获取数据。 在我的 RequestHelpers.js 中,我执行此代码

module.exports = 
    fetchQuizCollection()
      return fetch(HOST+API_KEY)
        .then((response) => response.json())
        .then((responseData) => 
          let gameData = responseData
          console.log(responseData) //It work
          return responseData
        )
      .done();
    

我在另一个文件中调用该函数,我无法获得我的 responseData

    let sampleQuiz = RequestHelpers.fetchQuizCollection()
    console.log(sampleQuiz) //undefined 

有什么方法可以在 promise 之外获取数据?

【问题讨论】:

【参考方案1】:

您将异步代码视为同步代码。 fetchQuizCollection() 是异步的,因此它返回的数据在您的日志记录代码运行时不可用。您必须等到所有.fetch() 函数完成。

只需让fetchQuizCollection() 通过添加另一个return 来返回一个承诺,如下所示

return fetchQuizCollection()
  return fetch(HOST+API_KEY)
    .then((response) => response.json())
    ...

您可以在.then() 函数中访问sampleQuiz

let sampleQuiz = RequestHelpers.fetchQuizCollection()
    .then((sampleQuiz) => 
        console.log(sampleQuiz);
    );

【讨论】:

以上是关于如何在 Fetch 的承诺链之外获取响应数据? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何从fetch获取响应值而不是没有值的promise?

如何使用 fetch 在 javascript 中获取 php 错误消息

如何在使用同构获取的异常处理承诺后解析 json

如何从 fetch javascript 请求的响应中获取数据

异步 Javascript - 使用 Fetch 从 Weather.gov 获取数据以更新页面,但返回的承诺不再可用

完成后逃离承诺链[重复]