node.js - 努力在nodejs的for循环中使用异步等待
问题描述
我试图在 for 循环中使用多个函数,但是,一个返回未定义(或不等待?)
代码如下:
var arrNew = [];
var id = [];
var get1 = [];
var get2 = [];
var get3 = [];
var res = [];
var get4 = [];
for (j = 0; j < arrNew.length; j++) {
id[j] = arrNew[j];
get1[j] = await get1Fun(context, id[j]);
if (get1[j] !== false) {
get2[j] = await get2Fun(context, get1[j]);
context.log(get2[j]);
if (get2[j].length) {
get3[j] = await get3Fun(context, get2[j]);
if (get3[j] !== false && get3[j].status == 200) {
res[j] = get3[j].result;
get4[j] = await get4Fun(context, id[j], res[j]);
context.log(get4[j])
}
}
}
}
async function get1Fun(context, id) {
const querySpec = {
query: `SELECT * FROM r where r.id = "${id}"`,
};
const { resources } = await client.database(databaseId).container(containerId).items.query(querySpec).fetchAll();
if (resources.length == 1) {
return resources[0];
} else if (!resources.length) {
return false;
}
}
function get2Fun(context, getInt) {
return new Promise((resolve, reject) => {
var msg = []
// do for loop stuff with getInt and push stuff into msg
context.log(msg)
resolve(msg);
});
}
代码一直运行到 get2Fun 返回 undefined 或 if (get2[j].length)
不等待await get2Fun
.
有人可以澄清出了什么问题吗?
我尝试过使用异步功能但没有承诺。
我有如下数组的原因是,如果我将函数构造为,var get1 = await get1Fun(context, id)
那么 for 循环将在 1 或 2 个项目后停止,而不是在arrNew
.
提前致谢。
编辑:
还尝试了以下方法,但 for 循环在 1 个循环后停止(可能是每个循环重新定义变量的问题?):
for (j = 0; j < arrNew.length; j++) {
var id = arrNew[j];
var get1 = await get1Fun(context, id);
if (get1 !== false) {
var get2 = await get2Fun(context, get1);
context.log(get2);
if (get2.length) {
var get3 = await get3Fun(context, get2);
if (get3 !== false && get3.status == 200) {
var res = get3.result;
var get4 = await get4Fun(context, id, res);
context.log(get4)
}
}
}
}
async function get1Fun(context, id) {
const querySpec = {
query: `SELECT * FROM r where r.id = "${id}"`,
};
const { resources } = await client.database(databaseId).container(containerId).items.query(querySpec).fetchAll();
if (resources.length == 1) {
return resources[0];
} else if (!resources.length) {
return false;
}
}
async function get2Fun(context, getInt) {
var msg = []
// do for loop stuff with getInt and push stuff into msg
context.log(msg)
return msg;
}
解决方案
推荐阅读
- regex - Coldfusion 替换函数或右函数返回一个空格
- mysql - 无法从 Mysql 中删除一行 Not metadata-lock
- mysql - MySQL 存储过程插入验证
- c++ - 编译时检查变量是否有符号/无符号
- firebase - 无法将 Firebase 与我的应用程序集成
- reactjs - Redux 更新错误状态,将之前设置的状态设置为 null
- python - 导入 pyplot 模块并调用 pyplot,plot() 但未将返回值存储到任何变量。但是调用 pyplot.show() 函数?
- neo4j - 验证我的节点的开始日期或结束日期是否在特定日期范围内
- python - 我正在制作 CPS 计数器,但定时器有问题?
- tensorflow - 在 TFServing 中进行批处理时启用可变长度输入填充