This question already has an answer here:
I have an ajax call which needs to return a promise. The function is as follows
client.tickets.create(ticket, function(err, req, result) {
if (err) {
logger.error(err);
return false;
}
return JSON.stringify(result);
});
I have to wait for this function to execute before I can perform the next action. How can I promisify this function ?
I tried the following and it gave me an error saying Cannot call method then of undefined
:
return client.tickets.create(ticket).then(function(result){
return JSON.stringify(result);
},function(err){
logger.error(err);
return false;
});
Using Q api you can achive promise.
rather than manually wrapping async code into promises, I would advice using libraries like
Bluebird
to do that for you:You have the error because
create()
is not a Promise. Promisifying an async function is quite easy (nodejs has a built-in Promise support nowadays):