(μ΄κ²μ # 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)
μ΄λ―Έ second
μ first
μ°κ²°νκΈ° λλ¬Έμ Promise.all([first, second]);
λ°νν΄μΌνλ€κ³ μκ°νμ§ μμ΅λλ€. return first
λ§ μλν΄ μ£Όμκ² μ΅λκΉ? λ λ²μ§ΈλΆν° createTable
μμ then
μλ μ€νμ μ°κ²°λ©λλ€ first
,μ μΆκ° ν νμκ° μμ΅λλ€ Promise.all
κ·Έκ²μ΄ μ€ν μ»μ κ²μ΄κΈ° λλ¬Έμ, μ΄μ¨λ first
κ° ν΄κ²°λλ λμ.
μ½μ μ¬μμ μ½μμ΄ μ΄νλλ©΄ λ€μλ μ΄νλμ§ μμμΌνλ©° ν₯ν λͺ¨λ then
νΈμΆμ μΊμ λ κ²°κ³Όλ₯Ό λ°νν΄μΌνλ€κ³ λ§ν©λλ€. first
λ° second
κ° λͺ¨λ μΆ©μ‘±λλ κ²½μ° Promise.all([first, second])
λ ~ μλνμ§ μμμΌν©λλ€.
return first
μ λμΌν λμμν©λλ€. μ¦, first
, first
, second
ν
μ΄λΈμ μμ±νλ €κ³ ν©λλ€. ν΄λΉ μλ리μ€μμ first.then
μ μ λ¬ λ ν¨μ λ΄λΆμ λͺ¨λ κ²μ μ€μ λ‘ νκ°νλ μ½λλ μ λλ‘ μλ©λλ€.
μ, μ΄μνκ² λ€λ¦¬ λ€μ. Promise.all
μ¬μ©νμ§ μμΌλ©΄ μ±λ₯μ΄ μ½κ° ν₯μ λ μ μμ΅λλ€.)
κ·Έλ¬λ λ€, μ΄κ²μ μλͺ»λ κ² κ°μ΅λλ€. μ§κΈμ μ΄κ²μ λ²κ·Έλ‘ νμνκ³ @tgriesserκ° μΈλ¦΄ λκΉμ§ κΈ°λ€λ¦΄ κ²μ λλ€.λ³΄κ³ ν΄ μ£Όμ μ κ°μ¬ν©λλ€!
νν, λλ λ§μ΄κ·Έλ μ΄μ μμ 1 ν±μ μ±λ₯μ νΉλ³ν μ κ²½ μ°μ§ μλλ€.
μ£μ‘ν©λλ€. μμ μ€λͺ
μ μλͺ» μμ±νμ΅λλ€. return first
μ (λ) μ¬μ ν λ λ²μ§Έ ν
μ΄λΈμ μμ±ν΄μΌν©λλ€. ν¨μ κ²°κ³Όμ λν΄ .then
λ₯Ό νΈμΆ ν κ²°κ³Όκ°μ΄λ₯Ό κΈ°λ€λ¦¬μ§ μκΈ° λλ¬Έμ
λλ€. w / e-μ¬μ ν first
, first
, second
!
μμ ν μ΄ν΄νμ§ λͺ»ν¨ : λ λ²μ§Έ ν
μ΄λΈμ΄ 첫 λ²μ§Έ ν
μ΄λΈμ΄ μμ± λ λκΉμ§ κΈ°λ€λ¦¬μ§ μλ μ΄μ λ 무μμ
λκΉ? then
μ (λ₯Ό) μ¬μ©νμ¬ μ²« λ²μ§Έ μ½μμ μ°κ²°νκΈ° λλ¬Έμ ν¨κ³Όμ μΌλ‘ μ°μμ μΌλ‘ μ€νλ©λλ€. κ·Έκ²μ λ¬Έμ κ°λμ§ μμ΅λλ€.
λ λ²μ§Έ ν
μ΄λΈ μμ±μ κ°λ₯νμ§λ§ exports.up
ν¨μμ κ²°κ³Όλ κ·Έλ μ§ μμ΅λλ€. μ¦, exports.up().then
λ₯Ό νΈμΆνλ©΄ first.then
κ° μλλΌ second.then
first.then
λ₯Ό νΈμΆνλ κ²κ³Ό κ°μ΅λλ€. _is_ first.then
!
μ, κ±°κΈ°μμ λΉμ μ μ€ν΄νμ΅λλ€-κ·Έλ λΉμ μ΄ λ§μ΅λλ€!
λ°λΌμ μ¬κΈ°μ νΌλμ€λ¬μ΄ μ μ createTable
λ©μλκ° promiseλ₯Ό λ°ννμ§ μκ³ μ€νλ € "thenable"μΈ 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
λ€, μ°λ¦¬λ κ·Έκ²λ³΄λ€ λ 볡μ‘ν μμ‘΄μ± κ·Έλνλ₯Ό κ°μ§κ³ μμ΅λλ€. μ΄κ²μ μ΅μνμ ν μ€νΈ μΌμ΄μ€μμ΅λλ€! λμ μ£Όμ μ κ°μ¬ν©λλ€.
μλ νμΈμ.
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
λ©μλκ° promiseλ₯Ό λ°ννμ§ μκ³ μ€νλ € "thenable"μΈSchemaBuilder
κ°μ²΄λ₯Ό λ°ννλ€λ κ²μ λλ€. μ¦,.then
κ°μ²΄λ μ ν¨ν A + μ½μμ λ°ννμ§λ§ κ°μ²΄ μ체λ μ½μμ΄ μλλλ€.μ΄κ²μ ꡬ문μ μ¬μ©ν μ μλλ‘ νΉλ³ν μνλμμ΅λλ€.
λμΌν μ°κ²°μμ μμλλ‘ λ§μ΄κ·Έλ μ΄μ μ μμλλ‘ μ€νν΄μΌν©λλ€.
λν μ¬κΈ°μμ
Promise.all
κ° νμνμ§ μμ΅λλ€. μ΄λ κ²νλ©΄ λμΌν κ²°κ³Όλ₯Ό μ»μ μ μμ΅λλ€.μνλ κ²½μ° λ€μμ μν ν μ μμ΅λλ€.
μ¬μμ μ μ λλλ‘ μλν©λλ€.