Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
257 views
in Technique[技术] by (71.8m points)

node.js - how to make a block completely synchronous which consists of mongoose query?

for(var i = 0 ; i < objects.length ; i++){

if(type == "user")
{   // normal mathematical calculations 
  // result.push(objects[i])
 }
 else if( type == "group"){  
 // Here i need a query "group" model 
  // find group related stuffs  
 // and then push to result  
 // result.push(objects[i]) 
  }

}

since group is taking time for querying mongoose schema..so when the objects[i] comes to group section it shows undefined..i need to make sure objects[i] for group executes and the control should go to user block

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You can make this block sync but only inside of async function. You need to use async/await and thats all.

async function syncBlock(objects) {
	const result = [];
	for (var i = 0; i < objects.length; i++) {
		const type = objects[i].type;
		if (type === "user") {
			result.push(objects[i])
		} else if (type === "group") {
			// Now loop will "wait" for result from find
			const res = await find(objects[i]);
			result.push(res)
		}
	}
	return result;
}
async function find(o) {
	return new Promise((resolve) => {
		setTimeout(() => {
			resolve(o);
		}, 100);
	});
}
syncBlock([
	{type : 'group'},
	{type : 'user'},
	{type : 'group'},
	{type : 'user'},
	{type : 'group'}
]).then((res) => {
	console.log(res);
}).catch((err) => {
	console.error(err);
});

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...