2016-04-07 2 views
3

У меня есть следующий метод, который запрашивает documentdb для документа и возвращает результаты вызывающему.Устранение отложенных не работает должным образом

fetch: function(query) { 
    var fetchDeferred = q.defer(); 
    client.queryDocuments(collectionLink, query).toArray(function(err, docs) { 
     console.log("Fetch return values - " + JSON.stringify(err) + " - " + JSON.stringify(docs)); 
     if (err) { 
      fetchDeferred.reject(err); 
     } else { 
      fetchDeferred.resolve(docs); 
     } 
    }); 
    return fetchDeferred.promise; 
} 

Когда я вызываю метод выборки, я вижу следующий результат

Fetch return values - undefined - [] 

Так что я знаю, что documentDb возвращает данные. Теперь, основываясь на моих условиях, fetchDeferred.resolve должен решить обещание.

Эта функция вызывается из обработчика прибудет маршрут следующего

exports.get = function(request, response) { 

    var userId = '100'; 
    var querySpec = { 
     query: 'SELECT * FROM root r WHERE r.id = \'user_\' + @id', 
     parameters: [{ 
      name: '@id', 
      value: userId 
     }] 
    }; 
    docdb.fetch(querySpec).then(function(result){ 
     response.send(statusCodes.OK, {data: result}) 
    }, function(error){ 
     response.send(statusCodes.OK, {data: error}); 
    }); 
}; 

Теперь, когда я звоню маршрут, я должен получать результат следующий

{data:[]} 

Но функция успеха не получение звонка :(Любая идея, почему это может произойти?

+1

Поэтому, чтобы быть уверенным: когда вы вызываете функцию из обработчика маршрута, вы видите консольный журнал, но функция успеха не вызвана? Вызывается функция ошибки? – fikkatra

+0

Что такое метод 'toArray'? Сколько раз это называется? –

+0

queryDocuments выглядит как функция async. вы можете захотеть поместить вызов toArray после проверки ошибки ... – softwarenewbie7331

ответ

0

Внесите услугу $timeout и попробуйте написать вот так:

client.queryDocuments(collectionLink, query).toArray(function(err, docs) { 
    console.log("Fetch return values - " + JSON.stringify(err) + " - " + JSON.stringify(docs)); 

    $timeout(function() { 
     if (err) { 
      fetchDeferred.reject(err); 
     } else { 
      fetchDeferred.resolve(docs); 
     } 
    }); 
}); 
Смежные вопросы