Node.js在documentdb-q-promises中的多个查询

时间:2018-07-30 17:01:09

标签: node.js azure-cosmosdb

我想使用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的文档,但是我不明白。 有人可以向我解释我该怎么做。

1 个答案:

答案 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;

测试结果:

enter image description here

希望它对您有帮助。