Backend/NodeJS
[node] How to double co-routine in promise & loop
하우아유두잉
2019. 11. 26. 17:06
비동기 작업의 동기화, 코루틴
각 회원들의 프로필과 친구리스트를
회원별로 새로운 객체에 담고 싶을때
co-routine과 promise를 활용하여
DB 작업은 비동기로 처리하고
베이스 루틴은 동기적으로 처리하여
만들어진 객체를 반환한다.
이 작업은 코루틴 안에서 작업을 비동기적으로 하면서, 모든 작업이 완료되었을 때 반환한다.
When all jobs are done, this funtion is return and the main tasks are processed asyncronously.
const cofunc = bPromise.coroutine(function* () {
try {
...
const members = yield getMembers(); // get DB
// [{"id":"", "email":""}, ...]
const re = yield new bPromise((resolve: any, reject: any) => {
const list = [];
members.forEach((member: any, idx: number) => {
const temp = [];
co(function*() {
const profile = yield getProfile(member); // get DB
const friends = yield getFriends(member); // get DB
list.push({"member":member, "profile":profile, "friends":friends});
return index ;
}).then((result: any) => {
if(index >= members.length-1)
return resolve();
});
});
});
// [{"member":{"id":"", "email":""}, "profile":{}, "friends":[...]}, ...]
return re;
} catch (err) { ... }
});
cofunc();
Co-routine in Loop in Promise in Co-routine