为什么 Promise 在 sequelize 中返回
Why is Promise returned in sequelize
我是续集的新手。所以,我正在编写一个查询,我在其中映射参数并在数据库中找到它们。但我得到的只是一个承诺。
这是我的代码
findData(params) {
return params.map(product => {
return Model.Stock.findAll({ raw: true })
.then(stocks => stocks.map(stock => ({ success: true, data: stock })))
.catch(err => ({ success: true, error: err.toString() }));
});
},
我希望得到对象,我该怎么做?
0:Promise
_bitField:33554432
_fulfillmentHandler0:undefined
_promise0:undefined
_receiver0:undefined
_rejectionHandler0:Array(4)
_trace:CapturedTrace
__proto__:Object
length:1
__proto__:Array(0)
我应该更改什么才能 return 个对象?
我建议阅读一些有关 promises 以及如何有效使用它们的内容。你可以在周围找到很多例子。
在您的特定情况下,查看代码,您确实收到了一个对象。
看看:
.then(stocks => stocks.map(stock => ({ success: true, data: stock })))
让我们进一步打破它:
stocks => stocks.map
股票应该(以名称结尾)有一个对象数组。
对于您的情况,您可以按如下方式使用它:
findData(params).then(function(yourObjects) {
//do something here...
});
解释(为什么返回承诺):
findData(params) {
return params.map(product => { // <-------- 2. So this will return array of promise objects
return Model.Stock.findAll({ raw: true }) //<------- 1. This will always returning promise , nature of sequlize
.then(stocks => stocks.map(stock => ({ success: true, data: stock })))
.catch(err => ({ success: true, error: err.toString() }));
});
},
解决方案 1:
Promise.all(findData(params)) // <-------- 3. Use Promise.all to solve all promise and get data from all
.then(stocs => {
console.log(stocks); //<----------- 4. console log your out put and you will get idea
});
解决方案 2:
findData(params) {
return Promise.all(params.map(product => {
return Model.Stock.findAll({ raw: true })
.then(stocks => stocks.map(stock => ({ success: true, data: stock })))
.catch(err => ({ success: true, error: err.toString() }));
}));
},
然后你可以得到这样的数据:
findData(params).then(your_data => { ..... })
我是续集的新手。所以,我正在编写一个查询,我在其中映射参数并在数据库中找到它们。但我得到的只是一个承诺。 这是我的代码
findData(params) {
return params.map(product => {
return Model.Stock.findAll({ raw: true })
.then(stocks => stocks.map(stock => ({ success: true, data: stock })))
.catch(err => ({ success: true, error: err.toString() }));
});
},
我希望得到对象,我该怎么做?
0:Promise
_bitField:33554432
_fulfillmentHandler0:undefined
_promise0:undefined
_receiver0:undefined
_rejectionHandler0:Array(4)
_trace:CapturedTrace
__proto__:Object
length:1
__proto__:Array(0)
我应该更改什么才能 return 个对象?
我建议阅读一些有关 promises 以及如何有效使用它们的内容。你可以在周围找到很多例子。
在您的特定情况下,查看代码,您确实收到了一个对象。 看看:
.then(stocks => stocks.map(stock => ({ success: true, data: stock })))
让我们进一步打破它:
stocks => stocks.map
股票应该(以名称结尾)有一个对象数组。
对于您的情况,您可以按如下方式使用它:
findData(params).then(function(yourObjects) {
//do something here...
});
解释(为什么返回承诺):
findData(params) {
return params.map(product => { // <-------- 2. So this will return array of promise objects
return Model.Stock.findAll({ raw: true }) //<------- 1. This will always returning promise , nature of sequlize
.then(stocks => stocks.map(stock => ({ success: true, data: stock })))
.catch(err => ({ success: true, error: err.toString() }));
});
},
解决方案 1:
Promise.all(findData(params)) // <-------- 3. Use Promise.all to solve all promise and get data from all
.then(stocs => {
console.log(stocks); //<----------- 4. console log your out put and you will get idea
});
解决方案 2:
findData(params) {
return Promise.all(params.map(product => {
return Model.Stock.findAll({ raw: true })
.then(stocks => stocks.map(stock => ({ success: true, data: stock })))
.catch(err => ({ success: true, error: err.toString() }));
}));
},
然后你可以得到这样的数据:
findData(params).then(your_data => { ..... })