#javascript #angularjs
#javascript #angularjs
Вопрос:
Есть ли способ подождать, пока обещание не будет выполнено, а затем продолжить выполнение?
Я знаю, что это не то, что вы обычно хотите делать, но это для взаимодействия с другим компонентом, который находится вне моей досягаемости.
По сути, компонент требует определения функции проверки, которая возвращает либо true, либо false, но все мои проверки являются promises (и, следовательно, асинхронными). Есть ли какой-нибудь способ заставить его работать между ними или мне нужно переключиться на синхронные вызовы.
код выглядит следующим образом: (упрощенный, конечно)
$scope.comp = new oldComponent(
{
//blah blah various settings,
validateFunction: function (someObject) { //this function must return true/false
return someObject.valid(); //doesn't work as object.valid() returns a promise;
}
}
Есть ли способ заставить его работать без изменения всех моих функций проверки?
Комментарии:
1. попробуйте — var promise = SomeObject.valid(); promise.then(возвращает /*независимо от того, какой результат valid равен */);
2. В качестве альтернативы, $ q.all способен объединять все обещания, если у вас их несколько, и ждать, пока все они не будут выполнены. Есть ли в этом какая-либо польза?
3. @Jorg Я боюсь, что нет. oldComponent вызывает функцию validateFunction и вычисляет ее возвращаемое значение, которое в данном случае будет promise (не true / false). Я не могу изменить его, чтобы дождаться обещания;
4. но может ли назначение
new oldcomponent...
ждать, пока обещание не будет выполнено?5. @Madhu ты имеешь в виду что-то вроде
return someObject.valid().then(function (data) { return data; //this is the result of valid() });
? Я почти уверен, что это также будет соответствовать обещанию