2016-04-07 14 views
3

documentdbにドキュメントを照会し、結果を呼び出し元に返す次のメソッドがあります。deferredの解決が期待通りに機能しない

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; 
} 

私はフェッチメソッドを呼び出すと、私はだから私はdocumentDbがデータを返すことを知っている次のような結果

Fetch return values - undefined - [] 

を参照してください。今私の条件に基づいて、fetchDeferred.resolveは約束を解決する必要があります。

次のようにこの関数は、私がルートを呼び出すとき

{data:[]} 

を次のように

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}); 
    }); 
}; 

は今、私は結果を取得する必要があります。しかし、成功の機能ではありませんGETルートハンドラから呼び出されます何が起こっているのでしょうか?

+1

これで、getルートハンドラから関数を呼び出すと、コンソールログが表示されますが、成功関数が呼び出されていないことを確認してください。エラー機能が呼び出されていますか? – fikkatra

+0

'toArray'メソッドとは何ですか?何回呼ばれているのですか? –

+0

queryDocumentsはasync関数のように見えます。 ... – 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); 
     } 
    }); 
}); 
関連する問題