【发布时间】:2020-07-20 13:19:08
【问题描述】:
我是 Javascript 新手,并试图了解 Promise 是如何工作的。我编写了以下代码来调用 REST API 并解析响应。
const buyFlightTicket = () => {
return new Promise( (resolve, reject) => {
setTimeout( () => {
let commentResponse = fetch('https://jsonplaceholder.typicode.com/comments/1');
commentResponse
.then(response => {
if (response.status == 200) {
resolve(response.json());
} else {
reject("Failed to fetch comment: " + response.statusText);
}
})
.reject("Failed to fetch comment");
}, 3000);
})
}
buyFlightTicket()
.then( (responseData) => console.log(responseData))
.catch( (error) => console.log(error));
我能够记录响应数据,但在将响应记录到控制台之前出现错误:未知错误。
是什么导致了这个错误?
另外,我如何在不使用 Promise 的情况下使用回调重写这段代码?
【问题讨论】:
-
我认为你必须使用 .catch("Failed to fetch comment") 而不是 .reject("Failed to fetch comment")。
-
@soltex 谢谢。我发帖后才发现。
-
避免使用
Promiseconstructor antipattern!在setTimeout之后立即resolve,并将其余部分放在then回调中。 -
"如何在不使用 Promise 的情况下使用回调重写此代码?" - 为什么要这样做?此外,这是不可能的,因为
fetch返回一个你必须使用的承诺。 -
@Bergi 如果没有反模式,你能告诉我如何重写这个吗?
标签: javascript ecmascript-6 es6-promise ecmascript-5