knex.jsを使用してSQLを生成して実行しています。既存のテーブルにフィールドを追加するときにエラーをトラップするのに問題があり、documentationはこの特定のケースをカバーしていません。重複したフィールドを追加しようとすると、コンソール(VSCODE)にエラーが返されますが、標準イベントはエラーで呼び出されないため、コードでトラップできません。ここでは、コードです:Knex.JSでフィールドを追加するときにエラーをキャッチする方法
knex.schema.table(tableName, function(table) {
table.string('test').catch(function(e) {
callback(e)
});
}).then(function(e) {
callback(e);
}).catch(function(e) {
callback(e);
})
これはVSCODEコンソールに返されます。
{ [TypeError: table.string(...).catch is not a function] '[email protected]': { accessToken: undefined } }
しかし、コールバックのどれが呼び出されません。フィールドの追加時にエラーを確認するにはどうすればよいですか?
UPDATE#1このコードはコールバックを呼び出しますが、明らかにエラー情報はありません。そして、同じエラーにかかわらず、コンソールに表示されます。
table.string('test').catch(
callback(null, Lib.returnEvent(false))
);
UPDATE#2んが、コールバックは、次のコードで呼ばれていません。この例ではUPDATE#3最初のコールバック
knex.schema.table(tableName, function(table) {
table.string('ddd');
}).then(function(e) {
callback(e);
}).catch(function(e) {
callback(e);
})
次の呼び出しで関数がハングします。
knex.schema.table(tableName, function(table) {
table.string('ddd');
callback(true);
}).then(function(e) {
callback(true, e);
}).catch(function(e) {
callback(false, e);
})
あなたのエラーが約束を返さないtable.string( 'テスト') '原因table.string( 'テスト')'についてですオブジェクト。 そのキャッチを削除すると、後で追加されたキャッチでエラーをキャッチできますか? – szinter
いいえ、単にtable.string( 'test')を呼び出すと、フィールドが最初に追加されます。しかし、重複している場合は、エラーがスローされないようです。成功したか失敗したかにかかわらず、外側の 'then'も 'catch'も呼び出されません。しかし、コンソールウィンドウに「ER_DUP_FIELDNAME」というメッセージが表示されます。 – ASA2
上に新しいコードサンプルがあります。 table.string()の呼び出しの直後にコールバックを追加しても、この関数の2番目の呼び出しは常にハングします。 – ASA2