データベースへの 2 つの非同期呼び出しで顧客 (会社) とその連絡先を作成するページがあります。連絡先は、サーバーの応答に含まれる顧客 ID が必要なため、顧客の後に保存する必要があります。また、すべてが完了すると、適切な新しい顧客ページにリダイレクトされます。
そのままでは、連絡先が保存される前でもリダイレクトが発生します。jQuery の$.when()
とを使用してみましたが、 と コールバック.done()
の間に切断があるため、おそらく機能しません。.when()
この状況でどのように機能させることができますか?
function saveAll() {
createCustomer();
createContacts();
var url = "<newCustomerDetailPage>"; // redirect when all is done
window.location = url;
}
function callback(result) {
if (result) {
// do something
} else {
// do something else
}
}
function errorHandler(error) {
// do something
}
function createCustomer() { // Create 1 new customer
// prep fields
var client = new toolkit.Client();
client.create(<fields>, callback, errorHandler);
}
function createContacts() { // Create 1 or more new contacts
$('.row').each(function() {
// prep fields
createContact(fields);
}
}
function createContact(fields) { // Create 1 new contact
var client = new toolkit.Client();
client.create(<fields>, callback, errorHandler);
}
function handleResult(result, callback, errorHandler) {
if (blah...)
callback(result)
else
errorHandler(error)
}
ツールキット.クライアント:
toolkit.Client = function(){}
toolkit.Client.prototype.create = function(fields, callback, errorHandler) {
// async call to database
function(result){ // handle server response
handleResult(result, callback, errorHandler);
}
}
client.create
一度に 1 つのレコードしか保存できないことに注意してください。
すでに試しました:
var actions = [];
function createContacts() { // Create 1 or more new contacts
$('.row').each(function() {
// prep fields
actions.push(function(){createContact(fields);});
}
}
function saveAll() {
createCustomer();
createContacts();
$.when.apply($,actions).done(function(){
var url = "<newCustomerDetailPage>"; // redirect when all is done
window.location = url;
});
}