From 9a90db2cc39677f4858a61b8b9644b14a0179edd Mon Sep 17 00:00:00 2001 From: Suguru Motegi Date: Thu, 23 Jun 2016 18:07:44 -0700 Subject: [PATCH] fix(asyncify): fix to avoid double callback https://github.com/caolan/async/pull/1197 --- lib/async.js | 2 +- test/utils/test.asyncify.js | 26 +++++++++++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/lib/async.js b/lib/async.js index 5afa2afd..8edab4e1 100644 --- a/lib/async.js +++ b/lib/async.js @@ -9501,7 +9501,7 @@ if (result && typeof result === obj && typeof result.then === func) { result.then(function(value) { callback(null, value); - })['catch'](function(err) { + }, function(err) { callback(err instanceof Error ? err : new Error(err)); }); } else { diff --git a/test/utils/test.asyncify.js b/test/utils/test.asyncify.js index b01fd937..76cc5b1c 100644 --- a/test/utils/test.asyncify.js +++ b/test/utils/test.asyncify.js @@ -1,4 +1,4 @@ -/* global it */ +/* global it, Promise */ 'use strict'; var assert = require('assert'); @@ -6,6 +6,7 @@ var assert = require('assert'); var parallel = require('mocha.parallel'); var async = require('../../'); +var delay = require('../config').delay; var Q = require('q'); parallel('#asyncify', function() { @@ -102,4 +103,27 @@ parallel('#asyncify', function() { }); }); + it('should avoid double callback', function(done) { + + var count = 0; + var msg = 'error in callback'; + var promisified = function(arg) { + return new Promise(function(resolve) { + resolve(arg + ' resolved'); + }); + }; + async.asyncify(promisified)('arg', function(err, res) { + count++; + if (err) { + return done(err); + } + assert.strictEqual(res, 'arg resolved'); + setTimeout(function() { + assert.strictEqual(count, 1); + done(); + }, delay); + throw new Error(msg); + }); + }); + });