我创建了一个{{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()函数返回数据?我想知道我想做什么甚至可以帮助你?
答案 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
,重新计算,这对你有用。