来自承诺图

时间:2018-06-06 07:27:40

标签: javascript node.js

大家好我有两种方法。

checkVenueAvailability(venues) {
        var replaced = venues.replace(/\t/g, "");
        var venues = replaced.split(',');
        var length = venues.length;
        Promise.all(venues.map(venue => {
            return new Promise((resolve, reject) => {
                pool.query("SELECT * FROM peminjaman_venue WHERE nama_venue = ?", venue,
                    function (err, rows, fields) {
                        if (err) {
                            return reject(err);
                        }
                        return resolve(rows);
                })
            })
        }))
    }

并且

mengajukan_event(req, res) {
        helper.checkVenueAvailability(req.body.venue_1)
        .then(function (result) {
            console.log(result);
        }).catch(function (err) {
            console.log(err);
        })
}

我想在mengajukan_event中打印checkVenueAvailability的结果。如何实现这一目标。我上面的代码只返回错误。三江源。

1 个答案:

答案 0 :(得分:1)

你不是返回任何东西。只需从Promise.all返回承诺:

    return Promise.all(venues.map(venue => {
//  ^^^^^^

另请注意,现在有数据库适配器可以使用基于Promise的API。或者,如果您不能使用,可以使用util.promisify

const promiseQuery = util.promisify(pool.query);

然后

checkVenueAvailability(venues) {
    var replaced = venues.replace(/\t/g, "");
    var venues = replaced.split(',');
    return Promise.all(venues.map(venue => promiseQuery("SELECT * FROM peminjaman_venue WHERE nama_venue = ?", venue));
}

(我也删除了var length = venues.length;,因为length没有用于任何事情。)