【问题标题】:Return a promise variable ouside the promise在承诺之外返回一个承诺变量
【发布时间】:2016-09-18 10:52:20
【问题描述】:

我需要从承诺中得到一个变量的值,但我不能因为它的范围。在我的情况下,我使用 Sequelize 将数据保存到 SQL 数据库,但我想处理类和 dataToReturn 在第二个 save 之后收到的承诺@

.post('/', (req, res) =>  {
  const event = new Event(Events, Data, req.body)
  event.save()
  res.status(201).json("HERE I NEED THE 'dataToReturn' from the promise")
})

这是我的课堂活动

class Event {

    constructor(Events, Data, Event) {
        this._Data = Data,
        this._Events = Events
        this._Event = Event
    }

    save() {
        this._Data.build(this._Event.Data).save().then((res) =>
            this._Events.build({
                name: this._Event.name,
                date: this._Evento.fecha,
                photo1: this._Event.photo1,
                photo2: this._Event.photo2,
                idData: res.dataValues.id
            }).save().then((dataToReturn) => "???")) <-- dont know what to do here
        return dataToReturn    <-- I want to return that variable but I cant because scopes
    }

你有什么推荐的? 我迷路了

【问题讨论】:

    标签: javascript node.js scope promise


    【解决方案1】:
       class Event {
            /**  
            * Same code
            */
        save() {            
            return this._Data.build(this._Event.Data).save().then((res) =>
                    this._Events.build({
                        name: this._Event.name,
                        date: this._Evento.fecha,
                        photo1: this._Event.photo1,
                        photo2: this._Event.photo2,
                        idData: res.dataValues.id
                    })).save();
        }
    

    然后在你的路由中使用then

    .post('/', (req, res) =>  {
      const event = new Event(Events, Data, req.body)
      event.save().then((dataToReturn) => {
       res.status(201).json(dataToReturn);
      });
    })
    

    【讨论】:

    • 非常感谢,我试图用save() 中的返回值做类似的事情,并放入一个变量event.save,类似var ans = event.save() 然后res.status(201).json(ans) 但没有工作。谢谢您的帮助。效果很好:D
    【解决方案2】:

    在移动设备上写这个,所以看起来不是最好的..

    删除事件中的 then。删除返回语句。在你的路线上做:

    return event.save().then(results => res.status(200).json(results));
    

    【讨论】:

    • 非常感谢,我试图用save() 的返回值做类似的事情,并放入一个变量event.save,类似var ans = event.save() 的东西,但没有用。感谢您的时间和帮助,我非常感谢。我将为 GlebkaF 提供最佳答案,因为它得到了更好的解释,它将帮助更多的人。再次感谢你。 :)
    猜你喜欢
    • 2015-06-05
    • 2015-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多