【发布时间】:2021-12-17 09:17:48
【问题描述】:
我编写了以下 lambda 函数来从 API 中获取数据并将其放入数据库中。当 API 只返回一个页面时,这工作正常,但是在 resolve() 运行之前 > 1 页 parseData 运行,但永远不会触发“功能完成”日志。这是resolve() 没有解决我期望的承诺吗?
exports.handler = async (event, context, callback) => {
let db = await initDB(); // External function
await api_get('users')
console.log("Function finished");
db.end()
callback(null)
function api_get(type, page = 1, count = 0, results = []) {
return new Promise(async function(resolve, reject) {
let uri = `https://api.com/v1/${type}`;
request.get(uri + '?page=' + page, async (error, response, body) => {
const data = JSON.parse(body);
results.push(data.users)
current_count = count + data.meta.count
if (current_count < data.meta.total) {
await api_get(type, page + 1, current_count, results);
}
else {
await parseData(type, results)
resolve()
}
});
});
}
function parseData(type, data) {
return new Promise(async function(resolve, reject) {
switch (type) {
case 'users':
let users = [].concat(...data)
let sql = ''
for (const user of users) {
sql = sql + `INSERT INTO users (user_id) VALUES ('${user_id}');`
}
db.query(sql)
.then( () => {
resolve()
})
break;
}
});
}
};
【问题讨论】:
-
你实际上可以选择其他库而不是
request,然后你可以一直使用async/await。相关问题:stackoverflow.com/q/60334548/14032355
标签: javascript node.js aws-lambda promise