fetch()
Gần đây tôi đã làm rối tung lên với api và nhận thấy một điều gì đó hơi kỳ quặc.
let url = "http://jsonplaceholder.typicode.com/posts/6";
let iterator = fetch(url);
iterator
.then(response => {
return {
data: response.json(),
status: response.status
}
})
.then(post => document.write(post.data));
;
post.data
trả về một Promise
đối tượng.
http://jsbin.com/wofulo/2/edit?js,output
Tuy nhiên nếu nó được viết là:
let url = "http://jsonplaceholder.typicode.com/posts/6";
let iterator = fetch(url);
iterator
.then(response => response.json())
.then(post => document.write(post.title));
;
post
đây là một tiêu chuẩn Object
mà bạn có thể truy cập thuộc tính title.
http://jsbin.com/wofulo/edit?js,output
Vì vậy, câu hỏi của tôi là: tại sao response.json
trả về một lời hứa trong một đối tượng theo nghĩa đen, nhưng lại trả về giá trị nếu vừa được trả về?
response.json()
rằng lời hứa có thể bị từ chối nếu phản hồi không phải là JSON hợp lệ.