fetch res.json继续返回未解析的promise

时间:2017-08-18 05:29:46

标签: javascript json promise fetch-api

我期待着这个:

fetch('https://response.democratsabroad.org/photos/?tag=alex')
    .then(res=>res.json())
    .then(res=>console.log(res))

返回一个json对象。相反,它正在返回一个未决的承诺。

Promise {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined}

screenshot of javascript console 为什么它会传递未解决的承诺而不是已解决的值?

1 个答案:

答案 0 :(得分:3)

首先,如果您不知道这一点,只要您直接在控制台中运行一行代码,控制台就会打印出该行代码所评估的内容。如果该行代码是函数调用或fetch(...).then(...).then(...)中的一系列函数调用,则控制台将显示该函数链返回的内容。它不会等待promises to resolve或callbacks被调用,它只是执行那行代码并报告它返回的内容。

并且,fetch().then()fetch().then().then()返回处于暂挂状态的承诺。这就是它的作用。然后,稍后当fetch()操作完成时,第一个承诺将完成,它将调用其.then()个处理程序。

但是,如果您只是查看控制台中返回的fetch().then()fetch().then().then(),那么它总是会在待处理状态下返回未解决的承诺,因为异步操作尚未完成,因此控制台将显示返回值。

您使用promises,以便将来在适当的时间执行.then()处理程序。因此,如果您想查看异步操作的结果,您应该记录传递给.then()处理程序的内容,然后在调用它们时,您将看到记录的相应数据。

注意:您应该在链的末尾有一个.catch()处理程序,这样您就可以看到您的保证链中发生的任何错误。