Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 承诺、获取、编码风格。请解释一下。然后(checkStatus)。然后(parseJSON)_Javascript_Promise_Fetch - Fatal编程技术网

Javascript 承诺、获取、编码风格。请解释一下。然后(checkStatus)。然后(parseJSON)

Javascript 承诺、获取、编码风格。请解释一下。然后(checkStatus)。然后(parseJSON),javascript,promise,fetch,Javascript,Promise,Fetch,我有测试代码 function checkStatus(response) { if (response.status >= 200 && response.status < 300) { return Promise.resolve(response) } else { return Promise.reject(new Error(response.statusText)); } } function par

我有测试代码

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(checkStatus)
                .then(parseJSON)
                .catch(error=>console.error(error))
请解释第二种变体。它如何
。然后(检查状态)
.then(parseJSON)
work?

我只写函数的引用,不运行它。

。然后
将函数作为其参数。。。它调用传递单个参数的函数,该参数是承诺的解析值

所以想想

return fetch('/api/test/'+ id + '/', {method: 'get'})
.then(checkStatus)
作为

顺便说一句,这并不局限于promise/then类型代码。。。考虑下面的

相同的概念-除了setTimout中回调返回的值被忽略。但是,在
.then()
中,回调返回的值用作承诺的解析值。。。这就是承诺链的工作原理(这是一个过于简化的解释)


@然而,oksana,这两个变量在
这个
将指向的函数内部有细微的差别,你将传递给
然后
@balajisoundar-这就是为什么我使用短语将
A
看作
B
。而不是说
A
就像
B
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");