Синхронный Бриз ExecuteQuery
Я получаю данные из БД, как это, используя обещание Бриз ExecuteQuery
:
var getdata = function(){
var manager = new breeze.EntityManager(serviceName);
var query = new EntityQuery().from('MyTable');
manager.executeQuery(query)
.then(function(data){
//line1
console.log('success');
});
//line2
console.log('end');
}
Есть ли способ сделать эту функцию синхронной: не выполняется line2 до line1 (или запрос не выполнен)?
Спасибо
1 ответ
Решение
Нет. Как только функция асинхронна, нет никакого реального способа сделать синхронный, но вы можете связать обещания. т.е.
var getdata = function(){
var manager = new breeze.EntityManager(serviceName);
var query = new EntityQuery().from('MyTable');
manager.executeQuery(query).then(doThis).then(doThat);
}
function doThis(data) {
console.log('success');
}
function doThat() {
console.log('end');
}
или же
var getdata = function() {
var manager = new breeze.EntityManager(serviceName);
var query = new EntityQuery().from('MyTable');
manager.executeQuery(query).then(function(data) {
console.log('success');
}).then(function() {
console.log('end');
}
Или вы можете захотеть, чтобы ваша функция getData сама возвращала обещание. Вы можете прочитать больше об этом здесь: https://github.com/kriskowal/q