Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.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承诺:匿名回调和非匿名回调之间有什么区别吗?_Javascript_Promise_Es6 Promise - Fatal编程技术网

Javascript承诺:匿名回调和非匿名回调之间有什么区别吗?

Javascript承诺:匿名回调和非匿名回调之间有什么区别吗?,javascript,promise,es6-promise,Javascript,Promise,Es6 Promise,打印出1 3 2 const example = () => new Promise((resolve) => { resolve(); console.log('1'); } ) example().then(console.log('3')) console.log('2'); 打印出1 2 3 我每次都测试了十多次。但结果是一样的。 为什么会出现这种差异?然后接受函数作为参数,而不是函数调用,例如console.log(它不返回函数,但返回未定义的)。所以当

打印出1 3 2

const example = () => new Promise((resolve) => {
    resolve();
    console.log('1');
} )

example().then(console.log('3'))
console.log('2');
打印出1 2 3

我每次都测试了十多次。但结果是一样的。
为什么会出现这种差异?

然后
接受函数作为参数,而不是函数调用,例如
console.log
(它不返回函数,但返回未定义的
)。所以当你这么做的时候

example().then(console.log('3'))

当遇到
.then
时,它立即计算
控制台.log('3')
,解释器希望/期望函数调用返回函数,以便将返回的函数放入
链中。因此,
console.log('3')
会立即打印出来。但是
console.log
返回未定义的-它不是进入异步
链的函数

它实际上与命名函数和匿名函数没有任何关系。第一个代码段给出了
。然后
一个函数作为参数,但第二个代码段给出了
。然后
一个
控制台.log
调用作为参数(立即计算并返回未定义)

只需在第一个代码段的
控制台.log
之前添加
()=>
,您就会看到它的行为与第二个代码段相同,方法是在主线程完成后异步运行
控制台.log
调用:

const-example=()=>新承诺((解析)=>{
解决();
console.log('1');
} )
示例()。然后(()=>console.log('3'))
console.log('2')
function create() {
    return new Promise(function(resolve, reject) {
        resolve();
        console.log('1');
    });
};

create().then(function() {
    console.log('3');
}, function() {
    console.log('4');
});

console.log('2');