为什么 fetch 会返回 promise pending?

新手上路,请多包涵

我正在使用 fetch 来获取数据,但它一直返回未决的承诺。我看过很多关于这个问题的帖子,尝试了所有的可能性,但没有解决我的问题。我想知道为什么 fetch 返回 promise 为 pending 简而言之,fetch 返回 pending 状态的可能情况是什么?

我的一段代码供参考:

 fetch(res.url).then(function(u){
    return u.json();
})
.then(function(j) {
    console.log(j);
});

原文由 Max 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 3k
1 个回答

Promises 是一种允许调用者在等待函数结果的同时做其他工作的方法。

请参阅 MDN 上的 承诺使用承诺

Promise 处于以下状态之一:

  • pending:初始状态,既没有完成也没有被拒绝。
  • fulfilled:表示操作成功完成。
  • rejected:表示操作失败。

fetch(url) 返回一个 Promise 对象。它允许使用可以响应结果值(对请求的响应)的 .then(…) 附加“监听器”。 .then(…) 再次返回 Promise 将给出结果的对象。

asyncawait

您可以使用 JS 语法糖来使用 Promises:

 async function my_async_fn(url) {
    let response = await fetch(url);
    console.log(response); // Logs the response
    return response;
)

console.log(my_async_fn(url)); // Returns Promise

async function 返回一个承诺。 await 关键字将函数的其余部分包装在 .then(…) 中。这里等效于没有 awaitasync

 // This function also returns Promise
function my_async_fn(url) {
    return fetch(url).then(response => {
        console.log(response); // Logs the response
        return response;
    });
)

console.log(my_async_fn(url)); // Returns Promise

再次参见 MDN 上有关 Promises 的文章

原文由 jiwopene 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题