0

目标:

使用 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() 中处理这三种方法的正确方法是什么?

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

谢谢

4

1 回答 1

0

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

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

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

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);
    })
  });
}
于 2016-04-06T22:03:23.507 回答