EmberJS:如何创建一个可以从promise中返回数据的帮助器

时间:2016-03-30 22:02:36

标签: ember.js

我创建了一个{{findby}}助手,对于从数组中挑选一个项目非常有用,但我遇到了问题。帮助者不喜欢在一个promiseArray数组上调用findBy()

因此修改了帮助程序以执行此操作:

export function findby([array, key, value]) {
  let isPromiseArray = Ember.typeOf(array.then) === 'function';
  if (isPromiseArray) {
    array.then((arr) => {
      return arr.findBy(key, value) || null;
    });
  } else {
    return array.findBy(key, value) || null;
  }
}

export default Ember.Helper.helper(findby);

当然,如果传递的数组恰好是PromiseArray,请在尝试调用then()之前使用findBy()

问题是我似乎无法在这种情况下返回任何内容。从then()内部返回似乎并没有真正关闭辅助函数,因此帮助程序返回undefined。

如果我尝试这样做:

return array.then((arr) => {
  return arr.findBy(key, value) || null;
});

然后只是承诺本身从帮助者返回。

以下是我尝试的内容:{{3}}

这个问题似乎是助手的一般问题:有没有办法从帮助器中的promise / then()函数返回数据?我想知道我想做什么甚至可以帮助你?

1 个答案:

答案 0 :(得分:0)

我想你应该致电recompute

这样的事情:

function findBy([array, key, value]) {
    let content = Ember.get(array, 'content');

    if(!content) {
        array.then(() => this.recompute());
        return null;
    }

    return content.findBy(key, value) || null;
}

你尝试的是不可能的。如果写回返.then(() => <here>);,则返回箭头函数而不是父函数。父函数很久以前就已经返回了,它甚至都不会等待承诺。

但你可以随时致电.recompute,重新计算,这对你有用。