你有错误,因为create()
不是承诺.宣传异步功能非常简单(nodejs现在有内置的Promise支持):
function createTicket(ticket) { // 1 - Create a new Promise return new Promise(function (resolve, reject) { // 2 - Copy-paste your code inside this function client.tickets.create(ticket, function (err, req, result) { // 3 - in your async function's callback // replace return by reject (for the errors) and resolve (for the results) if (err) { reject(err); } else { resolve(JSON.stringify(result)); } }); }); } // 4 - consume your promise with then() (resolved promise) and catch (rejected promise) createTicket(ticket).then(function (result) { // deal with result here }).catch(function (err) { // deal with error here });
而不是手动将异步代码包装到promises中,我建议使用像Bluebird
你这样做的库:
var Bluebird = require('bluebird'); //either client.tickets = Bluebird.promisifyAll(client.tickets); //or client.tickets.createAsync = Bluebird.promisify(client.tickets.create); ... return client.tickets.createAsync(ticket) .then(JSON.stringify) .catch(err => { logger.error(error); return false });