Синхронный Бриз 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

Другие вопросы по тегам