解决延迟不能按预期工作

时间:2016-04-07 08:16:21

标签: javascript angularjs npm azure-cosmosdb

我有以下方法查询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方法时,我看到以下结果

Fetch return values - undefined - []

所以我知道documentDb返回数据。现在根据我的条件,fetchDeferred.resolve应该解决这个问题。

从get路由处理程序调用此函数,如下所示

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 个答案:

答案 0 :(得分: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);
        }
    });
});