我想使用documentdb渲染一个页面,以获取CosmoDB中两个不同查询的信息。
我有2个查询:
var FirstQuery = {
query: 'SELECT * FROM FactoryData',
};
var SecondQuery = {
query: 'SELECT * FROM StoreData',
};
并使用它来获取数据
docDbClient.queryDocuments(collLink, FirstQuery ).toArray(function (err, results) {
value1 = results;
});
docDbClient.queryDocuments(collLink, SecondQuery ).toArray(function (err, results) {
value2 = results;
});
然后我想用这些结果渲染视图,但是我不能从这种功能的实现中渲染出来。
res.render('view.html', {"value1" : value1 , "value2" : value2});
我知道这段代码将无法正常工作,但是我试图实现Promise,却不知道如何使用documentdb-q-promises来实现它。
我已经阅读了很多有关Q Promise的文档,但是我不明白。 有人可以向我解释我该怎么做。
答案 0 :(得分:1)
根据您的要求,我遵循了npm doc并在github上测试了代码,以测试本地快递项目中的以下代码。请参考。
var express = require('express');
var router = express.Router();
var DocumentClient = require('documentdb-q-promises').DocumentClientWrapper;
var host = 'https://***.documents.azure.com:443/'; // Add your endpoint
var masterKey = '***'; // Add the massterkey of the endpoint
var client = new DocumentClient(host, {masterKey: masterKey});
var collLink1 = 'dbs/db/colls/import';
var FirstQuery = 'select c.id,c.name from c';
var collLink2 = 'dbs/db/colls/item';
var returnArray = [];
client.queryDocuments(collLink1, FirstQuery).toArrayAsync().
then(function(response){
console.log(response.feed);
var map = {};
map['value1'] = response.feed;
returnArray.push(map);
return client.queryDocuments(collLink2, FirstQuery).toArrayAsync()
})
.then(function(response) {
console.log(response.feed);
var map = {};
map['value2'] = response.feed;
returnArray.push(map);
})
.fail(function(error) {
console.log("An error occured", error);
});
router.get('/', function(req, res, next) {
res.send(returnArray);
});
module.exports = router;
测试结果:
希望它对您有帮助。