(рдпрд╣ # 312 рдХрд╛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)
рдПрдХ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдЬреИрд╕реЗ:
exports.up = function(knex, Promise) {
var first = knex.schema.createTable('first', function(table) {
table.increments('id');
table.string('name');
});
var second = first.then(function() {
return knex.schema.createTable('second', function(table) {
table.increments('id');
table.string('name');
});
});
return Promise.all([first, second]);
};
exports.down = function(knex, Promise) {
};
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрдЙрдЯрдкреБрдЯ рджреЗрддрд╛ рд╣реИ:
{ __cid: '__cid1',
sql: 'create table "first" ("id" serial primary key, "name" varchar(255))',
bindings: [] }
{ __cid: '__cid2',
sql: 'create table "first" ("id" serial primary key, "name" varchar(255))',
bindings: [] }
{ __cid: '__cid3',
sql: 'create table "second" ("id" serial primary key, "name" varchar(255))',
bindings: [] }
error: duplicate key value violates unique constraint "pg_type_typname_nsp_index"
at Connection.parseE (/home/sohum/node_modules/pg/lib/connection.js:526:11)
at Connection.parseMessage (/home/sohum/node_modules/pg/lib/connection.js:356:17)
at Socket.<anonymous> (/home/sohum/node_modules/pg/lib/connection.js:105:22)
at Socket.EventEmitter.emit (events.js:95:17)
at Socket.<anonymous> (_stream_readable.js:745:14)
at Socket.EventEmitter.emit (events.js:92:17)
at emitReadable_ (_stream_readable.js:407:10)
at emitReadable (_stream_readable.js:403:5)
at readableAddChunk (_stream_readable.js:165:9)
at Socket.Readable.push (_stream_readable.js:127:10)
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЖрдкрдХреЛ Promise.all([first, second]);
рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╣реА second
рд╕реЗ first
ред рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдХреЗрд╡рд▓ return first
рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдХреЗ рдмрд╛рдж рд╕реЗ рдЕрдкрдиреЗ рджреВрд╕рд░реЗ createTable
рдПрдХ рдХреЗ рдЕрдВрджрд░ рд╣реИ then
рдЬрд┐рдирдореЗрдВ рд╕реЗ рдмрдВрдж рд╢реНрд░реГрдВрдЦрд▓рд┐рдд рд╣реИ first
, рд╡рд╣рд╛рдБ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ Promise.all
, рдХреЗ рдмрд╛рдж рд╕реЗ рдпрд╣ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ рд╡реИрд╕реЗ рднреА first
рдХрд╛ рд╣рд▓ рд╣реЛ рд░рд╣рд╛ рд╣реИред
рд╡рд╛рджрд╛ рдпреБрдХреНрддрд┐ рдХрд╣рддреА рд╣реИ рдХрд┐ рдПрдХ рдмрд╛рд░ рдПрдХ рд╡рд╛рджрд╛ рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХрднреА рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ then
рд╕рднреА рднрд╡рд┐рд╖реНрдп рдХреЗ рдЖрдХреНрд░рдордгреЛрдВ рдХреЛ рдХреИрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдЧрд░ first
рдФрд░ second
рджреЛрдиреЛрдВ рдкреВрд░реЗ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ Promise.all([first, second])
~ рдПрдХ рд╕реЗрд╢рди рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
return first
рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рдорд╛рди рд╣реИ - рдЕрд░реНрдерд╛рдд, рдпрд╣ first
, first
, рдФрд░ second
рдЯреЗрдмрд▓ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ _even рдЕрдзрд┐рдХ рдЧрд▓рдд_ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╡рд╣рд╛рдБ рд╣реИ рдХрднреА рднреА рдРрд╕рд╛ рдХреЛрдИ рдХреЛрдб рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ first.then
рдкрд╛рд╕ рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддрд╛ рд╣реЛред
рдЙрдореНрдо рдареАрдХ рд╣реИ рдЬреЛ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИред Promise.all
рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдереЛрдбрд╝реА рд╡реГрджреНрдзрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ;)
рд▓реЗрдХрд┐рди рд╣рд╛рдБ, рдпрд╣ рдЧрд▓рдд рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдореИрдВ рдЗрд╕реЗ рдЕрднреА рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реВрдВрдЧрд╛ рдФрд░ @tgriesser рдХреА рдЭрдВрдХрд╛рд░ рддрдХ рдЗрдВрддрдЬрд╛рд░
рд╣рд╛рд╣рд╛, рдореБрдЭреЗ рдЕрдкрдиреЗ рдкреНрд░рд╡рд╛рд╕ рдореЗрдВ рдПрдХ рдЯрд┐рдХ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдореВрд▓реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ: рдкреА
рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВрдиреЗ рдКрдкрд░ рдПрдХ рдЧрд▓рдд рдмрдпрд╛рди рджрд┐рдпрд╛ - return first
рдХреЛ рдЕрднреА рднреА рджреВрд╕рд░реА рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдиреА рдЪрд╛рд╣рд┐рдП, рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдкрд░ .then
рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЗрд╕рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЬреЛ, w / e - рдпрд╣ рдЕрднреА рднреА рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ first
, first
, second
!
рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ: рдкрд╣рд▓реА рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рджреВрд╕рд░реА рддрд╛рд▓рд┐рдХрд╛ рдХреНрдпреЛрдВ рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдЧреА? рдЪреВрдБрдХрд┐ рдЖрдк then
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╣рд▓реЗ рд╡рд╛рджреЗ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдмрдВрдж рдХрд░рддреЗ рд╣реИрдВ,
рджреВрд╕рд░реА рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг, рд╣рд╛рдВ, рд▓реЗрдХрд┐рди exports.up
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ред Ie, рдпрджрд┐ рдЖрдк exports.up().then
рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ first.then
рдФрд░ second.then
- рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ _is_ first.then
!
рдЖрд╣, рддреБрдо рд╡рд╣рд╛рдБ рдЧрд▓рдд рд╕рдордЭрд╛ - рд╣рд╛рдБ, рддреБрдо рдЙрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╣реА рд╣реЛ!
рддреЛ рдпрд╣рд╛рдБ рднреНрд░рдо рдпрд╣ рд╣реИ рдХрд┐ createTable
рдкрджреНрдзрддрд┐ рдПрдХ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдмрд▓реНрдХрд┐ рдпрд╣ SchemaBuilder
рд╡рд╕реНрддреБ рджреЗрддреА рд╣реИ, рдЬреЛ рдХрд┐ "рддрддреНрдХрд╛рд▓реАрди" рд╣реИ, рдЕрд░реНрдерд╛рдд .then
рдкрд░ рдХреЙрд▓ рдХрд░рдирд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рд╡реИрдз A + рд╡рд╛рджрд╛ рд▓реМрдЯрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рд╡рд╕реНрддреБ рд╕реНрд╡рдпрдВ рдПрдХ рд╡рд╛рджрд╛ рдирд╣реАрдВ рд╣реИред
рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЖрдкрдХреЛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
return knex.schema.createTable('first', function(table) {
table.increments('id');
table.string('name');
})
.createTable('second', function(table) {
table.increments('id');
table.string('name');
}).then(function() {
// all done
});
рдЬреЛ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдПрдХ рд╣реА рдХрдиреЗрдХреНрд╢рди рдкрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдкрд▓рд╛рдпрди рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣рд╛рдБ Promise.all
рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╣реА рдкреВрд░рд╛ рдХрд░реЗрдЧрд╛:
exports.up = function(knex, Promise) {
return knex.schema.createTable('first', function(table) {
table.increments('id');
table.string('name');
}).then(function() {
return knex.schema.createTable('second', function(table) {
table.increments('id');
table.string('name');
});
});
};
рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рдереЗ, рддреЛ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
exports.up = function(knex, Promise) {
var first = knex.schema.createTable('first', function(table) {
table.increments('id');
table.string('name');
}).then(); // coerce thenable to a promise
var second = first.then(function() {
return knex.schema.createTable('second', function(table) {
table.increments('id');
table.string('name');
});
});
return Promise.all([first, second]);
};
рдФрд░ рдЪреАрдЬреЗрдВ рдХрд▓реНрдкрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░реЗрдВрдЧреАред
рдареАрдХ рд╣реИ рдХрд┐ рдмрддрд╛рддреЗ рд╣реИрдВред рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ - рд╕реАрдзреЗ рд╕реАрдзреЗ @SohumB рдЬрд╡рд╛рдм рджреЗрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рднреНрд░рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЦреЗрдж рд╣реИ
рд╣рд╛рдБ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдирд┐рд░реНрднрд░рддрд╛ рдЧреНрд░рд╛рдл рд╣реИрдВ; рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдиреНрдпреВрдирддрдо рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓рд╛ рдерд╛! рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
@johanneslumpe
sohum<strong i="8">@diurnal</strong> ~ % cat test.js
var Promise = require('bluebird');
function promises() {
var first = Promise.resolve('wee');
var second = first.then(function() {
console.log('delayin');
return Promise.delay(1000);
}).then(function() {
console.log('done!');
});
return first;
}
promises().then(function() { console.log('yep, first is finished'); });
sohum<strong i="9">@diurnal</strong> ~ % node test.js
delayin
yep, first is finished
done!
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рддреЛ рдпрд╣рд╛рдБ рднреНрд░рдо рдпрд╣ рд╣реИ рдХрд┐
createTable
рдкрджреНрдзрддрд┐ рдПрдХ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдмрд▓реНрдХрд┐ рдпрд╣SchemaBuilder
рд╡рд╕реНрддреБ рджреЗрддреА рд╣реИ, рдЬреЛ рдХрд┐ "рддрддреНрдХрд╛рд▓реАрди" рд╣реИ, рдЕрд░реНрдерд╛рдд.then
рдкрд░ рдХреЙрд▓ рдХрд░рдирд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рд╡реИрдз A + рд╡рд╛рджрд╛ рд▓реМрдЯрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рд╡рд╕реНрддреБ рд╕реНрд╡рдпрдВ рдПрдХ рд╡рд╛рджрд╛ рдирд╣реАрдВ рд╣реИредрдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЖрдкрдХреЛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
рдЬреЛ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдПрдХ рд╣реА рдХрдиреЗрдХреНрд╢рди рдкрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдкрд▓рд╛рдпрди рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣рд╛рдБ
Promise.all
рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╣реА рдкреВрд░рд╛ рдХрд░реЗрдЧрд╛:рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рдереЗ, рддреЛ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдФрд░ рдЪреАрдЬреЗрдВ рдХрд▓реНрдкрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░реЗрдВрдЧреАред