Я пытаюсь создать API, который может видеть, сделал ли я пост на imgur и действительно ли я близок к фини sh, но моя функция возвращается до конца
exports.handler = ( event, context, callback) => {
ddb.scan(params1, function(err, data) {
if (err) callback(null, err);
else {
data.Items.forEach(function(item) {
for (var o = 0; item.links && item.links.L && o < item.links.L.length; o++) {
var taction = "";
var treaction = "";
var action = item.links.L[o].S.substring(0, item.links.L[o].S.indexOf(' '));
var saction = action.substring(0, action.indexOf(':'));
var reaction = item.links.L[o].S.substring(item.links.L[o].S.indexOf('=')+2);
var sreaction = reaction.substring(0, reaction.indexOf(':'));
for (var z = 0; item.accsplus && item.accsplus.L && z < item.accsplus.L.length; z++) {
if (item.accsplus.L[z].S.substring(0, item.accsplus.L[z].S.indexOf(':')) == saction)
taction = item.accsplus.L[z].S.substring(item.accsplus.L[z].S.indexOf('token:')+6);
if (item.accsplus.L[z].S.substring(0, item.accsplus.L[z].S.indexOf(':')) == sreaction)
treaction = item.accsplus.L[z].S.substring(item.accsplus.L[z].S.indexOf('token:')+6);
}
if (taction == "" || treaction == "") log += "no token for this service @" +action+reaction + " ";
else{
console.log("testing " +action+reaction)
if ((saction == "imgur" || saction == "reddit") && (sreaction == "imgur" || sreaction == "reddit")) {
if (saction == "imgur")
imgur(action.substring(action.indexOf(':')+1), item, taction, reaction.substring(reaction.indexOf(':')+1));
}
}
}
})
callback(null, "ok");
}
});
async function imgur(action, whom, token, reaction) {
if (action =="") return;
var requestdone = false;
var toret;
var old = "";
var needed = action;
if (action == "onpost" || action == "onrem") needed = "postnbr";
if (action == "onlike" || action == "ondis") needed = "likenbr";
console.log("imgur " + needed);
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer " + token);
var requestOptions = {
method: 'GET',
headers: myHeaders,
redirect: 'follow'
};
async function request(success) {
const response = await fetch("https://api.imgur.com/3/account/me/images", requestOptions)
const json = await response.json();
return await success(json);;
}
function success(json) {
var worked;
if (needed == "postnbr") actual = (json.data.length);
if (needed == "likenbr"){
if (json.data[0].vote == null || json.data[0].vote == "null") actual = (0);
actual = (json.data[0].vote);
}
if (needed == "postnbr") console.log("postnbr = " + actual);
if (needed == "likenbr") console.log("likenbr = " + actual);
if (whom.old && whom.old.L && whom.old.L.length > 0){
for (var p = 0; old == "" && p < whom.old.L.length; p++){
if (whom.old.L[p].S.substring(0,whom.old.L[p].S.indexOf(':')) == "imgur"+needed)
{
old = whom.old.L[p].S.substring(whom.old.L[p].S.indexOf(':')+1);
if (action == "onpost" && old < actual) worked = true;
if (action == "onrem" && old > actual) worked = true;
if (action == "onlike" && old < actual) worked = true;
if (action == "ondis" && old > actual) worked = true;
}
}
}
if (worked)
{
return imgur(reaction, whom, token, "");
}
upold("imgur", needed, whom, actual)
}
await request(success)
}
var getactual = function(service, token, needed) {
return new Promise(function(resolve, reject){
if (service == "imgur"){
}
if (service == "reddit"){
console.log("do reddit mofo");
}
})
};
function upold(service, needed, whom, actual) {
var toret = [];
if (whom.old && whom.old.L.length > 0){
for (var m = 0; m < whom.old.L.length ; m++) {
if (whom.old.L[m].S.substring(0,whom.old.L[m].S.indexOf(':')) != service+needed)toret.push(whom.old.L[m].S);
}
}
toret.push(service+needed + ":" +actual);
param = {
TableName:"biipboop",
Key:{
"email": whom.email.S
},
UpdateExpression: "set old=:r",
ExpressionAttributeValues:{
":r":toret
},
ReturnValues:"UPDATED_NEW"
};
docClient.update(param, function() {});
}
};
пока что похоже, что функция работает и вызывается подфункция request, но main не ждет ответа и возвращает Promise {}, после чего журнал действительно появляется после успешного завершения, но у меня нет моей переменной в конце функции imgur, он просто регистрирует себя после завершения
EDITED: так как вы запросили фактический код, который я имел, я копирую и грубо вставляю его, у меня хорошо работает сканирование, получает весь мой пользователь, а затем он не ждет, пока функция «imgur» даст правильный ответ, а просто оставляет триггеры и выполняет итерацию по каждому элементу foreach.
я пытаюсь использовать лямбду и дб через aws
журналы поступают в следующем порядке:
testing imgur:onpostimgur:onlike
imgur postnbr
testing reddit:postreddit:onpost
postnbr = 3