然后/抓住承诺

Bro*_* KL 2 node.js promise

我有以下代码:

return requestAsync({
     method: 'GET',
     url: 'https://' + servers[num - 1] + ':8033/version.txt'
}).then().catch()
Run Code Online (Sandbox Code Playgroud)

我尝试在then处理程序中引发错误,但这没有用

如果then处理程序中不满足条件,我想抛出一个catch处理程序处理的错误。我该怎么做?

码:

var P = require('bluebird');
var defer = function () {
    var resolve, reject;
    var promise = new P(function () {
        resolve = arguments[0];
        reject = arguments[1];
    });
    return {
        resolve: function () {
            resolve.apply(null, arguments);
            return promise;
        },
        reject: function () {
            reject.apply(null, arguments);
            return promise;
        },
        promise: promise
    };
};

var pool = {maxSockets: Infinity};
var requestAsync = function (options) {
    options.pool = pool;
    options.timeout = 60000;
    options.rejectUnauthorized = false;
    options.strictSSL = false;
    var deferred = defer();
    var r = request(options, function (err, res, body) {
        if (err) {
            return deferred.reject(err);
        }
        deferred.resolve(res, body);
    });

    deferred.promise.req = r;

    return deferred.promise;
};

return requestAsync({
     method: 'GET',
     url: 'https://' + servers[num - 1] + ':8033/version.txt'
}).then(function (response) {
     throw new Error('Server is not taken');
}).catch(function (err) { });
Run Code Online (Sandbox Code Playgroud)

agc*_*nti 6

您可以手动throw错误:

requestAsync({
 method: 'GET',
 url: 'https://' + servers[num - 1] + ':8033/version.txt'
})
.then(function () { 
  throw new Error("Catch me")
}))
.catch(function (error) {
  console.error(error)
})
Run Code Online (Sandbox Code Playgroud)

jsbin:https://jsbin.com/dewiqafaca/edit html,js,控制台,输出