[MONGODB] Node.js를 - 여러 비동기 호출에 대한 대기
MONGODBNode.js를 - 여러 비동기 호출에 대한 대기
나는이 옥 템플릿을 렌더링하기 전에 여러 MongoDB의 쿼리를 만들려고 노력하고있어,하지만 난 꽤 모든 몽고 쿼리 템플릿을 렌더링하기 전에 완료 될 때까지 기다려야하는 방법을 알아낼 수 없습니다.
exports.init = function(req, res){
var NYLakes = {};
var NJLakes = {};
var filterNY = {"State" : "NY"};
db.collection('lakes').find(filterNY).toArray(function(err, result) {
if (err) throw err;
NYLakes = result;
});
var filterNJ = {"State" : "NJ"};
db.collection('lakes').find(filterNJ).toArray(function(err, result) {
if (err) throw err;
NJLakes = result;
});
res.render('explore/index', {
NYlakes: NYLakes,
NJlakes: NJLakes
});
};
해결법
-
==============================
1.나는 보통 후에 만 실행하는이 시간의 특정 번호를 호출되고있는 함수를 만듭니다하는 _.after 사용 그래서 나는, 밑줄 / lodash의 큰 팬입니다.
나는 보통 후에 만 실행하는이 시간의 특정 번호를 호출되고있는 함수를 만듭니다하는 _.after 사용 그래서 나는, 밑줄 / lodash의 큰 팬입니다.
var finished = _.after(2, doRender); asyncMethod1(data, function(err){ //... finished(); }); asyncMethod2(data, function(err){ //... finished(); }) function doRender(){ res.render(); // etc }
자바 스크립트 호이스트 때문에 함수 funcname에 () 구문을 사용하여 정의 함수의 정의, 코드는 자연스럽게 읽 위에서 아래를.
-
==============================
2.당신이 다음을 시작하기 전에 병렬보다는 마무리 한 대기에서이 작업을 실행하려면 가정하면, 각 콜백 완료 얼마나 많은 작업을 추적해야합니다.
당신이 다음을 시작하기 전에 병렬보다는 마무리 한 대기에서이 작업을 실행하려면 가정하면, 각 콜백 완료 얼마나 많은 작업을 추적해야합니다.
원시 Node.js를의 자바 스크립트에서 하나 개의 방법이이 될 것이라고해야 할 일 :
exports.init = function(req, res){ var NYLakes = null; var NJLakes = null; var filterNY = {"State" : "NY"}; db.collection('lakes').find(filterNY).toArray(function(err, result) { if (err) throw err; NYLakes = result; complete(); }); var filterNJ = {"State" : "NJ"}; db.collection('lakes').find(filterNJ).toArray(function(err, result) { if (err) throw err; NJLakes = result; complete(); }); function complete() { if (NYLakes !== null && NJLakes !== null) { res.render('explore/index', { NYlakes: NYLakes, NJlakes: NJLakes }); } } };
기본적으로 무슨 일이 일어나고 모두 완료 한 경우 각 작업의 끝에서 확인하고, 그 시점에서 당신이 작업을 마무리한다는 것이다 있어요.
당신이 이런 일을 많이하고 있다면, 쉽게 이런 종류의 물건을 관리 할 수 있도록하는 도구의 예로서 비동기 라이브러리를보십시오.
-
==============================
3.당신은 비동기 모듈을 사용할 수 있습니다 :
당신은 비동기 모듈을 사용할 수 있습니다 :
var states = [{"State" : "NY"},{"State" : "NJ"}]; var findLakes = function(state,callback){ db.collection('lakes').find(state).toArray(callback); } async.map(states, findLakes , function(err, results){ // do something with array of results });
-
==============================
4.뭘요 https://github.com/luciotato/waitfor
뭘요 https://github.com/luciotato/waitfor
뭘요를 사용하여 :
exports.init = function(req, res){ var NYLakes = {}; var NJLakes = {}; var coll = db.collection('lakes'); var filterNY = {"State" : "NY"}; var a = wait.forMethod(coll,'find',filterNY); NYLakes = wait.forMethod(a,'toArray'); var filterNJ = {"State" : "NJ"}; var b = wait.forMethod(coll,'find',filterNJ); NJLakes = wait.forMethod(b,'toArray'); res.render('explore/index', { NYlakes: NYLakes, NJlakes: NJLakes } ); };
병렬지도 뭘요 사용하여 병렬로 요청 :
exports.init = function(req, res){ var coll = db.collection('lakes'); //execute in parallel, wait for results var result = wait.parallel.map( [{coll:coll,filter:{"State" : "NY"}} , {coll:coll,filter:{"State" : "NJ"}}] , getData); res.render('explore/index', { NYlakes: result[0], NJlakes: result[1] } ); }; //map function function getData(item,callback){ try{ var a = wait.forMethod(item.coll,'find',item.filter); var b = wait.forMethod(a,'toArray'); callback (null, b); } catch(err){ callback(err); }
당신이 전화를 조정해야 할 수도 있습니다, 그래서 나는 몽고에 익숙하지 않다.
-
==============================
5.이 await를 사용하여 코드의 최소 라인처럼 보인다 :
이 await를 사용하여 코드의 최소 라인처럼 보인다 :
var async = require("async"); //include async module ... async function getData() { //make sure to use async function var NYlakes = await db.collection('lakes').find(filterNY); //can append additional logic after the find() var NJlakes = await db.collection('lakes').find(filterNJ); res.json({"NYLakes": NYLakes, "NJLakes": NJLakes}); //render response } getData();
사이드 참고 : Promise.all 역할을한다 await를이 경우에는 ()에 await를 기능을 남용하지 않도록주의하십시오.
from https://stackoverflow.com/questions/18008479/node-js-wait-for-multiple-async-calls by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 하나의 문에서 여러 몽고 업데이트 연산자? (0) | 2019.12.14 |
---|---|
[MONGODB] MongoDB를 - DBREF이 필요하다? (0) | 2019.12.14 |
[MONGODB] 몽고에서는 DBRef으로 조회 $합니다 (0) | 2019.12.14 |
[MONGODB] MongoDB의에서 검색 / 프로젝션을 수행 할 때 어떻게 필드의 이름을 변경합니까? (0) | 2019.12.14 |
[MONGODB] pyMongo과 ISODate 만들기 (0) | 2019.12.14 |