in src/CallbackContext.js [21:96]
function _rawCallbackContext(client, id, scheduleNext) {
const postError = (err, callback) => {
structuredConsole.logError('Invoke Error', err);
client.postInvocationError(err, id, callback);
};
let isCompleteInvoked = false;
const complete = (result, callback) => {
if (isCompleteInvoked) {
console.error(
'Invocation has already been reported as done. Cannot call complete more than once per invocation.',
);
return;
}
isCompleteInvoked = true;
client.postInvocationResponse(result, id, callback);
};
let waitForEmptyEventLoop = true;
const callback = function (err, result) {
BeforeExitListener.reset();
if (err !== undefined && err !== null) {
postError(err, scheduleNext);
} else {
if (!waitForEmptyEventLoop) {
complete(result, scheduleNext);
} else {
BeforeExitListener.set(() => {
setImmediate(() => {
complete(result, scheduleNext);
});
});
}
}
};
const done = (err, result) => {
BeforeExitListener.reset();
if (err !== undefined && err !== null) {
postError(err, scheduleNext);
} else {
complete(result, scheduleNext);
}
};
const succeed = (result) => {
done(null, result);
};
const fail = (err) => {
if (err === undefined || err === null) {
done('handled');
} else {
done(err, null);
}
};
const callbackContext = {
get callbackWaitsForEmptyEventLoop() {
return waitForEmptyEventLoop;
},
set callbackWaitsForEmptyEventLoop(value) {
waitForEmptyEventLoop = value;
},
succeed: succeed,
fail: fail,
done: done,
};
return [
callback,
callbackContext,
function () {
isCompleteInvoked = true;
},
];
}