How to pass argument to "then" function

deferred, javascript, promise, q

Solution

`deferred.resolve` can accept only one argument and that is to mark the success of the asynchronous call. To notify of the failure, you need to use `deferred.reject`. So your code has to be changed like this

var makeCall = function(err,param){
    setTimeout(function () {
        console.log(1111, err, param);
        var deferred = Q.defer();
        if (err) {
            deferred.reject(err);
        } else {
            deferred.resolve(param);
        }
    }, 1000);
    return deferred.promise;
};

makeCall(undefined, '11').then(function (data) {
    console.log(222, data);
}, function (err) {
    console.log(333, err);
});

This will print `222 '11'`, to simulate the failure case, just invoke `makeCall` with any Truthy value as the first argument, for example

makeCall('11')....

it will invoke the failure handler, and the output will be `333 '11'`.

Problem

I'm trying to learn using deferred and I'm stumbled as I'm not getting expected arguments in the "then" block. ``` var makeCall = function (err, param) { var deferred = Q.defer(); setTimeout(function() { console.log(1111, err, param); deferred.resolve(err, param); }, 1000); return deferred.promise; }; makeCall('test', '11').then(function(err, data) { console.log(222, err, data); }); ``` Console. with 1111 outputs correct data that was returned from an Ajax call but 222 does not. http://jsfiddle.net/M2V44/

Original source