承诺未定义而不是布尔

时间:2017-02-09 20:14:14

标签: javascript promise bluebird cheerio

我使用Promise库来获取另一个带有cheerio请求的promise-request库的结果,但是不是boolean我一直得到undefined

return Promise.try(function () {
        .....
    }).then(function () {
        return self.checkGroupJoined(id);
    }).then(function (data) {
        console.log(data);

promise-request

的方法
this.checkGroupJoined = function (steam_id) {
    var options = {
        uri: 'url',
        transform: function (body) {
            return cheerio.load(body);
        }
    };

    return rp(options).then(function ($) {
        $('.maincontent').filter(function () {
            if ($(this).find('a.linkTitle[href="url"]').length > 0){
                return true;
            } else {
                return false;
            }
        });
    }).catch(function (err) {
        return error.throw('Failed to parse body from response');
    });
};

我应该promisifyAll个图书馆吗?

2 个答案:

答案 0 :(得分:3)

我想你真正想要的是

….then(function ($) {
    return $('.maincontent').find('a.linkTitle[href="url"]').length > 0;
}).…

这将return来自promise回调的布尔值,使其成为履行价值。

答案 1 :(得分:0)

您需要更改此部分

return rp(options).then(function ($) {
        // You are not returning anything here
        $('.maincontent').filter(function () {
            if ($(this).find('a.linkTitle[href="url"]').length > 0){
                return true;
            } else {
                return false;
            }
        });
    }).catch(function (err) {
        return error.throw('Failed to parse body from response');
    });

如果您将代码更改为此代码,则应该可以正常运行。

return rp(options).then(function ($) {
        let found = false;
        $('.maincontent').filter(function () {
            if ($(this).find('a.linkTitle[href="url"]').length > 0){
                found = true;
            }
        });
        return found;
    }).catch(function (err) {
        return error.throw('Failed to parse body from response');
    });