用javascript
编写的这两个函数有什么区别?
function 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))
function 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))
第一个是错误的。
答案 0 :(得分:4)
我在代码中添加了一些标记以供参考。
这是片段#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,换句话说 - 只有在重新加载承诺解决后才会初始化变量b
。
另一方面,在第一个代码段中,变量b
会根据reload
承诺的状态独立初始化。
演示:这是一个演示,供您直观地看到差异http://jsfiddle.net/fn93gz3w/ (删除false&&运行代码段)。
最后,如果从第二个then
块返回新的Promise,则可以使第一个代码段与第二个代码段(正确)相同:在这种情况下,promises将被链接,第三个回调函数为{{1初始化将等到b
结算。在我的演示中检查此行为。