Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.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 为什么Promise.then()只适用于箭头函数?_Javascript - Fatal编程技术网

Javascript 为什么Promise.then()只适用于箭头函数?

Javascript 为什么Promise.then()只适用于箭头函数?,javascript,Javascript,我正在尝试用Javascript处理承诺,作为初学者,我发现缩写箭头函数有点难读。所以现在我想把它扩展成function(){},而不是()=> 在处理承诺时,以下情况不起作用: defineAsyncComponent(()=>{ return import('@ckeditor/ckeditor5-vue/dist/ckeditor.js').then( function(module) { module.component }).catch(f

我正在尝试用Javascript处理
承诺
,作为初学者,我发现缩写
箭头函数
有点难读。所以现在我想把它扩展成
function(){}
,而不是
()=>

在处理承诺时,以下情况不起作用:

defineAsyncComponent(()=>{
      return import('@ckeditor/ckeditor5-vue/dist/ckeditor.js').then( function(module) {
        module.component
      }).catch(function(error) {
        console.log(error)
      })
    })
但是,如果我将其更改为使用
aror函数
,则它确实可以工作:

defineAsyncComponent(()=>{
      return import('@ckeditor/ckeditor5-vue/dist/ckeditor.js').then((module) => module.component).catch((error) => console.log(error))
    })

这两者之间到底有什么区别导致第一个不能完全起作用?

我认为它不能起作用的原因是因为你没有从承诺中得到任何回报

请尝试以下操作:

defineAsyncComponent(()=>{
导入('@ckeditor/ckeditor5vue/dist/ckeditor.js')。然后(函数(模块){
返回模块组件;
}).catch(函数(错误){
console.log(错误);
})
});

没有
{}
的Arrow函数隐式地
返回

我认为在这种情况下,它与“”上下文有关(常规函数和Arrow函数都有,但使用方式不同)

当使用承诺的“then”方法时,您希望将承诺的响应(无论它是已解决还是已被拒绝)传递给它。现在,当有人叫“then”时,它会问“谁在叫我?”,这就是你的答案:

  • 当调用匿名函数(没有名字的函数)时,“this”将引用对象窗口(在该窗口中没有要传递给“then”方法的道具)
  • 调用arrow函数时,“this”将引用它的词法作用域(“then”方法所属的对象)以及它们想要传递的道具,因为promises返回一个值为resolved、rejected或pending的对象

然后可以同时使用“正常”和箭头功能?我假设您可能忘记了在正常函数中返回,因为箭头函数(没有花括号)隐式返回?尝试
返回模块.component
?@evolutionxbox“我假设您可能忘记返回…”-在
函数(){…}
中没有
返回
,因此该假设应该是一个语句;)@安德烈亚斯我多次因发表声明而感到谦卑。因此,我现在明确了他们的假设,我无法理解人们如何在环境中工作,像
模块.component
expression语句这样的东西不会立即引起警报响起我不认为箭头函数有一个
this
。那有点像他们的purpose@evolutionxbox他们有,但他们没有自己的约束力。嗨,谢谢你的回答。我必须返回两次才能让它正常工作,我不理解,比如
返回导入('@ckeditor/ckeditor5vue/dist/ckeditor.js')。然后(函数(模块){returnmodule.component})
这不会返回两次。它在两个不同的函数中返回一次。