Bluebird promise join 的顺序不是 运行

Bluebird promise join is not running in sequence

我在 knexjs 中使用 promise,但为什么 promise join 不是 运行 顺序,插入后行被删除:

exports.seed = function(knex, Promise) {
  return Promise.join(
    knex('states').del(),
    knex('states').insert([
    {
      'id': 1,
      'name': 'Georgia'
    },
    {
       'id': 2,
       'name': 'Tennessee'
    }
   ]);
  );
};

Join 是为了承诺 运行 是并行的,而不是顺序的。 “For coordinating multiple concurrent discrete promises。”因为你想在插入之前删除它们不是并发的。

Promise 在创建后立即执行,所以我认为这是常规 then:

的情况
exports.seed = function(knex, Promise) {
  return knex('states').del()
    .then(function() {
      return knex('states').insert([
        {
          'id': 1,
          'name': 'Georgia'
        },
        {
           'id': 2,
           'name': 'Tennessee'
        }
     ]);
  );
};

如果你喜欢 ES6 并准备好一切:

exports.seed = (knex) => {
  return B.resolve()
    .then(() => knex('states').del())
    .then(() => knex('states').insert([
      {
        'id': 1,
        'name': 'Georgia'
      },
      {
        'id': 2,
        'name': 'Tennessee'
      }
    ]));
}