我撰寫了以下 lambda 函式來從 API 獲取資料并將其放入資料庫。當 API 僅回傳單個頁面時,這可以正常作業,但是parseData在resolve()運行前> 1 頁,但永遠不會觸發“功能完成”日志。這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;
}
});
}
};
uj5u.com熱心網友回復:
如果滿足此條件,則不會呼叫 resolve():
if (current_count < data.meta.total) {
// If execution go in this block, you are never calling "resolve()"
await api_get(type, page 1, current_count, results);
}
else {
await parseData(type, results)
resolve()
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/345974.html
標籤:javascript 节点.js aws-lambda 承诺
上一篇:`file_get_contents("php://input")`是從`fetch`獲取發布資料的唯一方法,使用異步和hack-wise是否安全?
下一篇:使用箭頭函式轉換字串介紹陣列
