为什么Promise续集归还

时间:2018-07-27 06:45:56

标签: javascript object promise sequelize.js sequelize-cli

我是新来的续集。因此,我正在编写一个查询,在其中映射参数并在数据库中找到它们。但是我得到的只是一个承诺。 这是我的代码

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)

我应该更改什么才能返回对象?

2 个答案:

答案 0 :(得分:1)

我建议您阅读一些有关诺言以及如何有效使用诺言的信息。您可以在附近找到许多示例。

在您的特定情况下,查看代码,您确实会收到一个对象。 看看:

.then(stocks => stocks.map(stock => ({ success: true, data: stock })))

让我们更进一步:

stocks => stocks.map

股票(按名称结尾)应具有一组对象。

在您的情况下,您可以按以下方式使用它:

findData(params).then(function(yourObjects) {

    //do something here...
});

答案 1 :(得分:0)

说明(为什么要返回承诺):

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 => { ..... })