Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法获取我的q承诺以捕获错误_Javascript_Node.js_Promise - Fatal编程技术网

Javascript 无法获取我的q承诺以捕获错误

Javascript 无法获取我的q承诺以捕获错误,javascript,node.js,promise,Javascript,Node.js,Promise,我按照这里的指示: 但我不能让我的承诺返回处理程序抛出错误。它秘密地失败了。这使得调试非常困难。有人能找出我做错了什么吗 以下是我的功能: app.get('/api/recommend',function (req, res) { var results = require('./recommend').getOriginProfiles(req.query['origin'], req.query['target']).then( function getRecomm

我按照这里的指示:

但我不能让我的承诺返回处理程序抛出错误。它秘密地失败了。这使得调试非常困难。有人能找出我做错了什么吗

以下是我的功能:

app.get('/api/recommend',function (req, res) {
    var results = require('./recommend').getOriginProfiles(req.query['origin'], req.query['target']).then(
        function getRecommendations(results) {
           // debugger;

            sasd / asdasdasdasdasdasd; // fail darn you!
            require('./recommend').matchProfile(results[0]);
            res.send(results);
        }).fail(function (error) { //never failed
            throw error;

        });
    logger.log('DEBUG', '/api/recommend response', results);
});
getOriginProfiles是一个返回承诺的函数:

function getOriginProfiles(origin_qty, target_qty) {
    var deferred = q.defer();
    chooseRandomUsers(origin_qty).then(collectUserProfiles(origin_qty, target_qty, deferred), function (error) {
        logger.log('ERROR', 'recommending users', error);
        throw error;
    });
    return deferred.promise;
}

我会这样写:

var recommend = require('./recommend');

app.get('/api/recommend',function (req, res, next) {
    recommend.getOriginProfiles(req.query['origin'], req.query['target'])
        .then(function getRecommendations(results) {

            sasd / asdasdasdasdasdasd; // fail darn you!

            recommend.matchProfile(results[0]);
            res.send(results);

            logger.log('DEBUG', '/api/recommend response', results);
        })
        .fail(function (error) {
            next(error)
        })
        // Any function where you use a promise that isn't also returning a
        // promise should have .done on the chain to prevent it from swallowing
        // all exceptions.
        .done();
});


什么是
collectUserProfiles
function getOriginProfiles(origin_qty, target_qty) {
    return chooseRandomUsers(origin_qty)
        .then(function(users){
             // Return the promise here will then wait for that promise to finish.
             return collectUserProfiles(users, origin_qty, target_qty);
        })
        .fail(function (error) {
            logger.log('ERROR', 'recommending users', error);
            throw error;
        });
}