Я создал вспомогательный помощник {{findby}}
, который очень полезен для выбора элемента из массива, но я столкнулся с проблемой. Помощнику не нравится называть findBy()
массивом, который является обещанием.EmberJS: Как сделать помощника, который может возвращать данные из обещания
Так помощник был изменен, чтобы сделать это:
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()
, похоже, фактически не закрывает вспомогательную функцию, поэтому хелпер возвращает неопределенный.
Если я пытаюсь сделать:
return array.then((arr) => {
return arr.findBy(key, value) || null;
});
тогда только само обещание получает вернулся из помощника.
Вот Twiddle того, что я пытался: https://ember-twiddle.com/c82fb0e11641703f118e867b45403654?numColumns=2&openFiles=controllers.application.js%2Chelpers.findby.js
на вопрос, как представляется, вообще один для помощников: Есть ли способ, чтобы вернуть данные обещания затем функцию /() в качестве помощника? Интересно, возможно ли, что я хочу сделать, с помощником?
Вы должны проверить [ember-prom-helpers] (https://github.com/fivetanley/ember-promise-helpers) – nem035
@nem ok спасибо, это похоже, что это может быть полезно! – Grapho