如何在nodejs中实现异步函数
How can implement the function as asynchronous in nodejs
让我解释一下我的问题。我有一个foreach循环和一个switch条件。在每个switch情况下,我都将结果连接到一个全局数组中。
var resultArray = [];
Panels.forEach(function (panel, index) {
switch( panel.CategoryId ){
case 'math':
resultArray = resultArray.concat(SOMEVALUE COMES FROM DB);
break;
case 'physics':
resultArray = resultArray.concat(SOMEVALUE COMES FROM DB);
break;
case 'zoology':
resultArray = resultArray.concat(SOMEVALUE COMES FROM DB);
break;
}
return resultArray;
})
但是输出中并没有包含所有情况下的值。我知道它是因为nodejs的异步特性。但是我们如何在异步中实现这个函数呢?
任何想法都是可观的
要创建类似的同步程序流,您必须在设计中使用回调模式:
functionPerformingQuery(function(result){
handleResult(result);
});
主要思想是:
- 创建一个接受回调函数的函数
- 操作完成时调用回调函数
- 在代码中定义回调函数以访问所有私有变量
有望采用更标准化的方法
https://www.promisejs.org/
在foreach循环中,不需要返回。试试看:
var resultArray = [];
Panels.forEach(function (panel, index) {
switch( panel.CategoryId ){
case 'math':
resultArray = resultArray.concat(SOMEVALUE COMES FROM DB);
break;
case 'physics':
resultArray = resultArray.concat(SOMEVALUE COMES FROM DB);
break;
case 'zoology':
resultArray = resultArray.concat(SOMEVALUE COMES FROM DB);
break;
}
})
console.log(resultArray);
在我看来,由于db上的请求是异步的,您需要使用promise Jquery promise 来执行结果
var resultArray = [];
Panels.forEach(function (panel, index) {
switch( panel.CategoryId ){
case 'math':
myDBfunction().then(function(result) {
resultArray = resultArray.concat(result);
});
break;
case 'physics':
myDBfunction().then(function(result) {
resultArray = resultArray.concat(result);
});
break;
case 'zoology':
myDBfunction().then(function(result) {
resultArray = resultArray.concat(result);
});
break;
}
return resultArray;
})
function myDBfunction() {
var deferred = new jQuery.Deferred();
// do some with DB (not real code)
mysql.query("SELECT * ....", function(dbError, dbResult) {
deferred.resolve(dbResult);
})
return deferred.promise()
}
- 如何在nodejs中实现异步函数
- 将递归函数转换为异步 CPS 实现 (javascript)
- 如何从异步函数创建同步函数以实现向后兼容性
- 是否有在“异步”中实现的非递归功能
- 如何使用承诺实现顺序异步计算
- 如何在javascript中实现异步编程(promise)?是't javascript是一个ui线程环境
- 如何实现Typescript异步等待模式:Promise在哪里
- 流星客户端异步模式 / 如何为订阅列表和回调实现 waitOn
- 如何通过多个$.ajax调用实现异步计算可观察性
- 如何在javascript中实现异步服务调用
- 如何实现包含测试和异步函数调用的代码的顺序执行
- node.js:如何在forEach循环中实现一个带有异步调用的路由方法
- 如何实现进度条和回调与异步性质的文件阅读器
- 如何使用承诺实现异步无限循环
- 如何在 JavaScript 中实现异步函数之间的依赖关系
- 如何在javascript中实现异步作业调度器
- 如何实现一个windows store javascript应用的异步for循环
- 如何封装异步调用以实现同步行为?
- 异步xhr的安全实现
- 试图在SAPUI5中实现对oData的异步读取调用