У меня есть следующий метод, который запрашивает 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:[]}
Но функция успеха не получение звонка :(Любая идея, почему это может произойти?
Поэтому, чтобы быть уверенным: когда вы вызываете функцию из обработчика маршрута, вы видите консольный журнал, но функция успеха не вызвана? Вызывается функция ошибки? – fikkatra
Что такое метод 'toArray'? Сколько раз это называется? –
queryDocuments выглядит как функция async. вы можете захотеть поместить вызов toArray после проверки ошибки ... – softwarenewbie7331