【问题标题】:Multiple functions with JavaScript promises带有 JavaScript 承诺的多个函数
【发布时间】:2016-04-06 21:05:52
【问题描述】:

目标:

使用 JavaScript 承诺,在 load() 上,如果尚未填充数据库,则使用数据为其播种,然后使用 getWidgets() 显示数据,否则,如果数据库已播种,则只需 getWidgets()。

代码:

const initialWidgets = [
  {id: 1, color: 'Red', sprocketCount: 7, owner: 'John'},
  {id: 2, color: 'Taupe', sprocketCount: 1, owner: 'George'},
  {id: 3, color: 'Green', sprocketCount: 8, owner: 'Ringo'},
  {id: 4, color: 'Blue', sprocketCount: 2, owner: 'Paul'}
];

require('./model');
const Widget = require('mongoose').model('WidgetModel');

function seedWidgets() {
  let results = [];
  Widget.find({}, function (err, collection) {
    if (err) { throw err;}

    if (collection.length === 0) {
      initialWidgets.map(widget => {
        Widget.create(widget);
      });
    }
  })
}

export function getWidgets(req) {
  let widgets = req.session.widgets;
  if (!widgets) {
    /// ?? seed database  
   /// ?? add new records to session
  }
  return widgets;
}

export default function load(req) {
  return new Promise((resolve, reject) => {
    resolve(getWidgets(req));
  })
}

在 load() 中使用 Promise 处理这三种方法的正确方法是什么...

  1. 种子数据库(如果尚未填充)
  2. 将记录添加到会话中
  3. 显示会话对象

谢谢

【问题讨论】:

标签: javascript reactjs redux react-redux


【解决方案1】:

仅供参考:这是对项目的增强:
https://github.com/erikras/react-redux-universal-hot-example

Promise 对我来说是新的。这可行,但我不知道这是否是正确的方法。

我非常感谢那些比我更有知识的人说出我的解决方案,即好或坏,或者是否有更好的解决方案。

const initialWidgets = [
  {id: 1, color: 'Red', sprocketCount: 7, owner: 'John'},
  {id: 2, color: 'Taupe', sprocketCount: 1, owner: 'George'},
  {id: 3, color: 'Green', sprocketCount: 8, owner: 'Ringo'},
  {id: 4, color: 'Blue', sprocketCount: 2, owner: 'Paul'}
];

require('./model');
const Widget = require('mongoose').model('WidgetModel');

function seedWidgets() {
  let results = [];
  return new Promise((resolve, reject) => {
    Widget.find({}, (err, collection) => {
      if (collection.length === 0) {
        initialWidgets.map(widget => {
          Widget.create(widget);
          results.push(widget);
        });
      }
      if (err) reject(err);
      else resolve(results);
    })
  });
}

export default function load() {
  return new Promise((resolve, reject) => {
        resolve(getWidgets(req));
  });
}
export default function getWidgets() {
  return new Promise((resolve, reject) => {
    seedWidgets().then((result) => {
      Widget.find({}).then((result) => {
        resolve(result);
      })
    }).catch((err) => {
      reject(err);
    })
  });
}

【讨论】:

    猜你喜欢
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 2016-04-02
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    相关资源
    最近更新 更多