sequelize查询返回Promise {_bitField:...}

时间:2017-06-05 15:00:05

标签: node.js express promise sequelize.js

我想在另一个变量中返回 sequelize query中的值。我必须尝试不同的解决方案,但我有相同的结果:

    Promise {
  _bitField: 2097152,
  _fulfillmentHandler0: undefined,
  _rejectionHandler0: undefined,
  _promise0: undefined,
  _receiver0: undefined,
  _boundTo: SellerPresent }

我的js文件(目前):

function findIdSeller(selectEvent) {
var match = {attribute: ['seller_id'], where: {event_id: selectEvent}, raw: true};
return models.SellerPresent.findAll(match)}

exports.findDataSeller = function (selectEvent) {
    var seller = [];
    return findIdSeller(selectEvent).then(function (result) {
        return  seller.push(result.seller_id)
    })
};

我需要在路线中导出这些数据。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

首先,请注意不能同步处理(或导出)异步结果,因此您需要始终坚持承诺。

其次,findAll方法将返回一个数组,因此您不应该访问该数组上的seller_id,而应该访问其元素。为此,您可以使用map

function findIdSeller(selectEvent) {
    var match = {
        attribute: ['seller_id'], 
        where: {
            event_id: selectEvent
        }, 
        raw: true
    };
    return models.SellerPresent.findAll(match);
}

// You can export a promise, not the promised value:
exports.findDataSellerPromise = function (selectEvent) {
    return findIdSeller(selectEvent).then(function (result) {
        return result.map(function(seller) {
            return seller.seller_id
        });
    });
});

您需要致电findDataSellerPromise作为回复承诺。因此,例如,如果您需要将承诺的数据用作路由中的响应,请在其上调用then

app.get('/', function (req, res) { 
    // ....
    findDataSellerPromise(selectEvent).then(function(sellers) {
        res.send(sellers);
    });
});