解决延迟问题无法按预期进行

Resolving deferred does not work as expected

本文关键字:延迟 问题 解决      更新时间:2024-03-07

我有以下方法,用于查询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应该解决该承诺。

这个函数是从获取路由处理程序调用的,如下所示

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:[]}

但是成功函数没有被调用:(知道为什么会发生这种情况吗?

注入$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);
        }
    });
});