繁体   English   中英

两个功能之间的差异

[英]difference between two functions

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))

第一个是错误的。

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

这是片段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,则可以使第一个代码片段的行为与第二个代码片段的行为相同(在正确的情况下):在这种情况下,promise将被链接,并且带有b初始化的第三个回调将等待直到reload解析为止。 在我的演示中检查此行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM