[解決済み] アクシオスを同期させる方法
2022-02-17 18:52:42
質問
axiosを使用して、あるエイリアスがデータベース内の別のエイリアスによってすでに使用されていないかどうかをチェックしています。
問題点 : ajax呼び出しは、残りのコードを実行するために、サーバーの応答を待機しません。
コードは次のようになります。
export default {
data () {
return {
id: null,
alias: null,
valid: true,
}
},
methods: {
// triggered by the save button
save () {
this.valid = true;
console.log('before checking');
this.checkUniqueness();
// other validations here
if (this.valid) {
console.log('3. checked valid, can save now');
// save now
}
},
checkUniqueness () {
axios.get('/api/unique/alias', {
params: {
id: this.id,
alias: this.alias,
}
})
.then((response) => {
console.log('2. server response:' + response.data.unique)
this.valid = response.data.unique;
});
},
},
}
コンソールに以下のような結果が表示されます。
1. before checking
3. checked valid, can save now
2. server response:false
のコードを移動することができません。
save()
メソッドを
.then
なぜなら、入力データに対して、英数字や最小文字数など、他の検証を行うからです。
3番目の部分を遅らせることができました(
if (this.valid) {
を使用しています。
setTimeout
しかし、それは最善の解決策ではありません。
質問 この呼び出しを (1, 3, 2) ではなく、(1, 2, 3) の順次呼び出しにする方法はありますか?
解決方法を教えてください。
同期させることはできない(少なくとも本当にしてはいけない)ので、別の方法が必要です。
一つのアイデアとして、Axiosからプロミスを返す。
checkUniqueness () {
return axios.get('/api/persons/unique/alias', {
params: {
id: this.id,
alias: this.alias,
}
})
.then((response) => {
console.log('2. server response:' + response.data.unique)
this.valid = response.data.unique;
});
}
を呼び出して
then()
の中で、その上に
save()
:
this.checkUniqueness()
.then((returnVal) => {
// other validations here
// save
})
.catch(err => console.log("Axios err: ", err))
の値を返せば、すべてのチェックを一箇所で行うこともできます。
then()
フラグを設定するのではありません。
.then((response) => {
console.log('2. server response:' + response.data.unique)
return response.data.unique;
});
を選択し、保存で
this.checkUniqueness()
.then((valid) => {
if (valid) // do something
// other validations here
// save
})
関連
-
[解決済み】このエラーの原因は何ですか - "Fatal error: ローカルgruntを見つけることができません"
-
[解決済み】未定義のプロパティ 'bind' を読み込めない。React.js【重複あり
-
[解決済み】Jestが予期しないトークンに遭遇した
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み】別のウェブページにリダイレクトするにはどうすればいいですか?
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 Uncaught TypeError: data.push is not a function
-
[解決済み】JavaScriptのgetElementByNameが機能しない
-
[解決済み】JavaScript "Uncaught TypeError: object is not a function" 連想性の質問
-
[解決済み] React with ES7: Uncaught TypeError: Cannot read property 'state' of undefined [duplicate] (未定義のプロパティ'state'を読み込むことはできません。
-
[解決済み】getElementByIdはnullを返す?[クローズド]
-
[解決済み】エラー:リスン EACCES 0.0.0.0:80 OSx Node.js
-
[解決済み】Redux TypeError: 未定義のプロパティ 'apply' を読み取れない
-
[解決済み】'useState' が定義されていない no-undef React
-
[解決済み】HTMLの最初の行に予期しないトークン<がある。
-
[解決済み】未定義のプロパティ 'forEach' を読み取ることができない