2016-04-07 92 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应该解决承诺。

这个功能是从一个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

所以可以确定的是:当您从get路由处理函数调用函数时,您会看到控制台日志,但成功函数没有被调用?错误函数是否被调用? – fikkatra

+0

什么是'toArray'方法?它被称为多少次? –

+0

queryDocuments看起来像异步函数。你可能想在检查错误之后再调用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); 
     } 
    }); 
}); 
相关问题