EmberJs承诺-现在要使.map()或.forEach()异步?

时间:2018-08-10 12:04:35

标签: ember.js promise rsvp.js

这是我的控制器操作:

saveArticle(article, blocks) {
  let self = this;

  return RSVP.all(article.get('blocks').invoke('destroyRecord')).then(function () {
      blocks.data.map(function (item) {
        let block = self.get('store').createRecord('block', {
          article: article,
          type: item.type,
          format: item.data.format,
          text: item.data.text,
        });
        block.save();
        article.get('blocks').pushObject(block);
        debug('Block added.');
      });
      //article.save();
  });
}

在创建所有块之后,如何立即执行article.save()?也就是说,我想删除所有当前块,创建新块,并仅在执行所有这些操作之后保存文章。 我感谢任何想法!

1 个答案:

答案 0 :(得分:0)

我用以下代码解决了这个问题:

saveArticle(article, blocks) {
  let self = this;

  return RSVP.all(article.get('blocks').invoke('destroyRecord')).then(function () {
    debug("Blocks deleted");
    let promises = blocks.data.map(function (item) {
      let block = self.get('store').createRecord('block', {
        article: article,
        type: item.type,
        format: item.data.format,
        text: item.data.text,
      });
      return block.save();
    });
    return RSVP.all(promises).then(function () {
      debug("Blocks saved");
      return article.save().then(function () {
        debug("Article saved");
      });
    });
  });
}