2016-04-07 12 views
3

Belgenin belgdb'ini sorgulayan ve sonuçları arayan kişiye veren aşağıdaki yönteme sahibim. Ertelenme ertelenmesi beklendiği gibi çalışmaz

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

Ben getirme yöntemini çağırın

, ben Yani documentDb verileri döndürür biliyoruz aşağıdaki sonucu

Fetch return values - undefined - [] 

görüyoruz. Şimdi koşullara dayanarak, fetchDeferred.resolve sözünü çözmelidir. Ben rotayı çağırdığınızda

{data:[]} 

aşağıdaki Ama başarı işlev değil gibi ben sonucun elde edilmelidir

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

şöyle

Bu fonksiyon bir get rota işleyicisi çağrılır çağrılıyor :(Bunun neden olabileceği hakkında bir fikrin var mı?

+1

Dolayısıyla, yalnızca emin olmak için: getiri işleyicisinden işlevi çağırdığınızda, konsol günlüğünü görürsünüz, ancak başarı işlevi çağrılmıyor mu? Hata fonksiyonu çağrılıyor mu? – fikkatra

+0

'toArray' yöntemi nedir? Kaç kere deniyor? –

+0

queryDocuments, async işlevi gibi görünüyor. err ... – softwarenewbie7331

cevap

0

$timeout hizmetini enjekte edin ve şöyle yazmayı deneyin:

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