2017-06-05 83 views
0

我想返回在另一個變量中的sequelize query的值。我對試圖不同的解決方案,但我有同樣的結果:sequelize query return Promise {_bitField:...}

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) 
    }) 
}; 

我需要在路線導出此數據。我怎麼能做到這一點?

+0

[如何返回從一個異步調用的響應?](HTTPS的可能重複: //stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) –

回答

0

首先,請注意,異步結果不能同步處理(或導出),因此您需要始終堅持承諾。

其次,findAll方法將返回一個數組,因此您不應該訪問該數組上的seller_id,而是訪問其元素上的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); 
    }); 
}); 
+0

感謝tricot。我的問題源於我應該在發送響應之前處理多個查詢的事實。你可以幫我嗎? – Gig90

+0

看看'Promise.all' – trincot

+0

但是這似乎是另一個問題,因爲在你的問題中,只有一個承諾,它的'then'方法。我沒有回答這個問題嗎? – trincot