gpt4 book ai didi

javascript - 两个函数的区别

转载 作者:行者123 更新时间:2023-11-30 10:01:35 25 4
gpt4 key购买 nike

这两个用 javascript 编写的函数有什么区别?

函数 1

var a, b;

this.get('obj').then(function(ob) {
a = ob.get('prop');
}.bind(this)).then(function() {
this.get('obj').reload();
}.bind(this)).then(function(){
b = this.get('obj.prop')
}.bind(this))

函数 2

this.get('obj').then(function(ob) {
a = ob.get('prop');
}.bind(this)).then(function(){
this.get('obj').reload().then(function(){
b = this.get('obj.prop');
}.bind(this))
}.bind(this))

第一个是错误的。

最佳答案

我在您的代码中添加了一些标记以供引用。

这是片段#2:

this.get('obj').then(function(ob) { // #1
a = ob.get('prop');
}.bind(this)).then(function() { // #2
this.get('obj').reload().then(function() { // #3
b = this.get('obj.prop');
}.bind(this))
}.bind(this));

现在,不同之处在于它保证回调#3 将在 reload 方法完成后被调用,换句话说 - 变量 b 将仅在 reload promise 被解析后才被初始化。

另一方面,在第一个片段中,变量 b 根据 reload promise 的状态独立初始化。

Demo:这里有一个demo,让你直观的看出区别http://jsfiddle.net/fn93gz3w/ (删除 false && 以运行代码段)。

最后,如果您从第二个 then block 返回新的 Promise,您可以使第一个代码片段的行为与第二个代码片段(正确地)相同:在这种情况下,promises 被链接起来,第三个回调与b 初始化将等到 reload 解析。在我的演示中检查此行为。

关于javascript - 两个函数的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31349709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com