Using node callback
beeline.startAsyncSpan({
task: "writing a file",
filePath,
}, span => {
writeFile(filePath, fileContents, (err, fileData) => {
if(err) {
beeline.addContext({fileError: err.toString()});
}
beeline.finishSpan(span);
});
});
Using promises
beeline.startAsyncSpan({
task: "writing a file",
filePath,
}, span => {
writeFile(filePath, fileContents)
.then(fileData => {
beeline.finishSpan(span);
})
.catch(err => {
beeline.addContext({fileError: err.toString()});
beeline.finishSpan(span);
});
});
If your code runs on newer js engines, you can use finally()
with promises
and avoid the repetition.
beeline.startAsyncSpan({
task: "writing a file",
filePath,
}, span => {
writeFile(filePath, fileContents)
.catch(err => { beeline.addContext({fileError: err.toString()}); })
.finally(() => { beeline.finishSpan(span); });
});
Using async/await
beeline.startAsyncSpan({
task: "writing a file",
filePath,
}, async (span) => {
try {
const fileData = await writeFile(filePath, fileContents);
} catch(err) {
beeline.addContext({fileError: err.toString()});
} finally {
beeline.finishSpan(span);
}
});