大佬教程收集整理的这篇文章主要介绍了如何使用 Node js 在单个 API 调用中传递两个请求 - Cloudant,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图在单个 API 调用中传递两个搜索请求,但有时我会同时收到两个请求结果,有时只收到一个请求结果。 基本上这是我在 cloudant db 中的 JsON 结构:
{
"_ID": "123","name": "Naveen","hoby": "Cricket"
},{
"_ID": "234","name": "Varun","hoby": "chess"
},{
"_ID": "345","name": "Tarun",{
"_ID": "456","name": "pavan","hoby": "chess"
}
这里我的要求是获得 Cricket 50 成员的“hoby”和 Chess 50 成员的“hoby”。 为此,这就是我目前正在尝试的方式:
doGet: function(request,responsE) {
var useRSState = [];
var names = { "useRSState": useRSState,"message": "ok" };
if (!myDb) {
response.Json({ "message": "Dataabase connection Failed" });
return;
}
var queryForCricket = {
"SELEctor": {
"hoby": "Cricket"
},"fIElds": [
"_ID","name","hoby"
],"sort": [],"limit": 50,"skip": 0
};
var queryForChess = {
"SELEctor": {
"hoby": "chess",},"skip": 0
};
async.parallel(
[
myDb.find(queryForCricket,function (err,body) {
if (!err) {
body.docs.forEach(function (doC) {
if (doC)
useRSState.push(doc);
});
response.Json(names);
}
}),myDb.find(queryForChess,body) {
if (!err) {
body.docs.forEach(function (doC) {
if (doC)
useRSState.push(doc);
});
}
})
],results) {
if (err) {
response.send({ "message": "Read operration Failed" });
return;
}
});
}
我编写了两个查询并通过异步调用传递了两个查询,但始终没有正确获得结果。那么有没有什么优化的方法来处理查询部分和获取结果。
@H_450_0@解决方法这里的问题是您的最终结果取决于 async.parallel
find
函数的两个回调的执行顺序。当第二个 find
首先完成时,您将获得两个结果,但当第一个 find
首先完成时,您将仅获得 queryForCricked
查询的结果。
要获得这两个结果,您应该在最终回调函数中收集它们并在那里使用 response.json
:
...
async.parallel(
[
myDb.find(queryForCricket,function (err,body) {
if (!err) {
body.docs.forEach(function (doC) {
if (doC)
usersState.push(doc);
});
}
}),myDb.find(queryForChess,body) {
if (!err) {
body.docs.forEach(function (doC) {
if (doC)
usersState.push(doc);
});
}
})
],results) {
if (err) {
response.send({ "message": "Read operration failed" });
return;
}
response.json(names);
}
);
...
虽然在共享 usersState
数组中收集数据是完全可行的方法,但它存在缺陷。例如,您无法控制插入 find
数据的顺序。 async.parallel
提供了一种从正在运行的函数中收集数据的更好方法。您可以在每个函数中使用 callBACk
async.parallel
inserts 来收集最终回调中的数据:
async.parallel(
[
function (cb) { myDb.find(queryForCricket,cb); },function (cb) { myDb.find(queryForChess,],results) {
if (err) {
response.send({ "message": "Read operration failed" });
return;
}
// result is an array with data from queries: [crickets.body,chess.body]
results.forEach(function (body) {
body.docs.forEach(function (doC) {
if (doC) usersState.push(doc);
});
});
response.json(names);
}
);
...
以上是大佬教程为你收集整理的如何使用 Node js 在单个 API 调用中传递两个请求 - Cloudant全部内容,希望文章能够帮你解决如何使用 Node js 在单个 API 调用中传递两个请求 - Cloudant所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。