Ember 2,这段代码有何不同?

时间:2017-07-04 22:26:26

标签: javascript arrays ember.js functional-programming ember-data

我使用此代码来模拟服务器延迟。

let promises = [];
child.get('authors').forEach(author => author.get('books').forEach(book => {
  var promise = new RSVP.Promise(function (resolve, reject) {
    let time = (Math.floor(Math.random() * 10) + 1) * 1000;
    Ember.run.later(() => {
      favoriteList.pushObject(book);
      resolve();
    }, time);
    if (somethingWrong) {
      reject(error);
    }
  });
  promises.push(promise)
}));

RSVP.all(promises).then(function () {
  console.log('Yoo! Finally!')
}).catch(function (error) {});

我想知道(除了Ember.run.later()我用来模拟服务器延迟的所有"得到")如果下面这段代码有差异?

child.get('authors').forEach(author => author.get('books').forEach(book => {
  favoriteList.pushObject(book);
}));

console.log('Yoo! Finally!')

与此代码有何不同?

child.get('authors').forEach(author => author.get('books')
  .reduce((accumulator, book) => {
    favoriteList.pushObject(book);
  })
);
console.log('Yoo! Finally!')

我也想知道性能差异和服务器延迟处理......

1 个答案:

答案 0 :(得分:0)

这是一个链接,显示围绕一个数组迭代的不同函数的基准测试:https://jsperf.com/array-reduce-vs-foreach/9

这表明forEach比sum操作的reduce慢。

除此之外,您没有适当地使用reduce。您可以看到在当前操作中没有使用以前的结果。那么为什么要使用reduce?您正在混淆程序员,因为它应该使用先前的结果并将结果返回到reduce操作中。

(我想那是你发生了什么事?你从其他人那里得到了这些代码而感到困惑。对吧?所以,使用这些函数来实现它们的目的)