【问题标题】:sequelize query return Promise { _bitField: ...}sequelize 查询返回 Promise { _bitField: ...}
【发布时间】:2017-11-06 09:32:36
【问题描述】:

我想在另一个变量中返回来自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)
    })
};

我需要在路由中导出这些数据。我该怎么做?

【问题讨论】:

标签: node.js express promise sequelize.js


【解决方案1】:

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

其次,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);
    });
});

【讨论】:

  • 感谢经编。我的问题源于我应该在发送响应之前处理多个查询。你能帮帮我吗?
  • 查看Promise.all
  • 但这似乎是另一个问题,因为在你的问题中只有一个承诺,它的then 方法。我没有回答这个问题吗?
  • 谢谢。你简直震撼了我的世界!
猜你喜欢
  • 2019-04-16
  • 1970-01-01
  • 2017-05-07
  • 1970-01-01
  • 2018-09-09
  • 2016-08-25
  • 2019-01-04
  • 2023-04-01
  • 1970-01-01
相关资源
最近更新 更多