I am using javascript to use the facebook send api.
function sendmessage(callback) {
for (i = 0; i < recipientId.length; i++) {
var messageData = {
recipient: {
id: recipientId[i]
},
message: {
text: messageText
}
};
callSendAPI(messageData, pagetoken, id_notsent);
}
return callback( );
}
function sendstatus() {
if (id_notsent.length == 0) {
res.statusCode = 200;
res.message = "Successfully sent generic message to all recipients";
} else {
res.statusCode = 400;
res.message = "Unable to send message to all users. Message not sent to recipients : " + id_notsent.toString();
};
resp.send(res);
}
sendmessage(sendstatus);
What i am trying to do is to update the id_notsent variable inside the sendmessage function which will basically contain user id correspoding to which message couldn’t be send and then sending back the response accordingly using sendstatus function. but the problem is that the callback in sendmessage is getting called before the callSendAPI function is completed.
2
Answers
You have multiple soluce here :
Using
async/await
ES8 pattern.Create a recursive function that’s gonna call one by one the
callSendAPI
.For example :
You can use either
callback
(what you are doing now), or eitherPromise
.I suspect
callSendAPI
is return some sort ofPromise
(or has a callback that you can turn into a Promise).The structure your
sendMessage()
function should then be around the lines ofBasically: get promises for all your calls, wait for them to complete using
Promise.all
then callback