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