我有测试代码!
function checkStatus(response) {
if (response.status >= 200 && response.status < 300) {
return Promise.resolve(response)
} else {
return Promise.reject(new Error(response.statusText));
}
}
function parseJSON(response) {
return response.json()
}
我可以这样写:
function load(id) {
return fetch('/api/test/'+ id + '/', {method: 'get'})
.then(response => checkStatus(response))
.then(response => parseJSON(response))
.catch(error=>console.error(error))
或者我可以像那样写:
function load(id) {
return fetch('/api/test/'+ id + '/', {method: 'get'})
.then(checkStatus)
.then(parseJSON)
.catch(error=>console.error(error))
请解释第二个变体。 .then(checkStatus)
.then(parseJSON)
如何运作?
我只是写了对函数的引用,而不是运行它。
答案 0 :(得分:3)
.then
将函数作为参数...它调用函数传递一个参数,该参数是promise的解析值
所以想想
return fetch('/api/test/'+ id + '/', {method: 'get'})
.then(checkStatus)
作为
return fetch('/api/test/'+ id + '/', {method: 'get'})
.then(function(resultOfPromise) {
return checkStatus(resultPromise);
})
顺便说一句,这不仅限于承诺/然后输入代码......请考虑以下
function doThings(p1) {
console.log(p1);
return 'good bye';
}
setTimeout(doThings, 1000, "hello world");
相同的概念 - 除了setTimout中回调返回的值被忽略。但是在
.then()
中,回调返回的值被用作Promise的解析值...这基本上是promise链的工作原理(这是一个过于简化的解释)