javascript - 两个函数的区别

标签 javascript ember.js

这两个用 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/

相关文章:

javascript - 如何在 Chrome 中的代码中设置 JavaScript 断点?

jquery - 移动事件,例如使用 emberjs 进行点击、滑动

Ember.js View 没有包装 Div?

javascript - Linq JS 将名称首字母分组的对象

javascript - Pageres (phantomjs) 不返回 promise

javascript - 将 JS var 传递给 PHP var

javascript - Ember Octane Route 类是否支持使用 mixins?

javascript - Ember Js : Common RESTAdapter

ember.js - `Ember new` 之后 IE 11 中的错误,应用程序无法提供服务 (Ember 3.1.2)

javascript - 是否可以使用 JS 修改调用脚本的 html 文件?