私はJQuery's
deferred
オブジェクトについてたくさん読んでいます。そして、コードを切り離すためにどのように機能するかを見ることができます。私はこれを元々Async.jsを使用して作成しましたが、promiseを使用することをお勧めします。
私が見つけたほとんどの例は、AJAX
呼び出しにチェーンするだけです。非同期関数をチェーンしたいのですが、その方法がわかりません。データベースから時刻を取得し、その時刻をURLのパラメーターとして使用して、最後にAJAX
呼び出しを行います。
これは私がいるところです:
var fetch = function (contactId, callback, errorCallback)
{
var buildPromise = new $.Deferred();
var getLastImportTime = function ()
{
var querySuccess = function (tx, result)
{
buildPromise.resolve("7 oclock");
};
var queryError = function (tx, e)
{
buildPromise.reject("Error querying database");
};
database.open();
database.query("SELECT EventImportTime FROM Contact WHERE Contact.Id = ?", [contactId], querySuccess, queryError);
};
var buildUrl = function (lastImportTime)
{
console.log("I do happen");
var url = "http://";
url += 'MobileGetChangedEvents.aspx?Reference=';
url += '&LastImportTime=';
url += lastImportTime;
url += '&Format=JSON';
return url;
};
var makeRequest = function (url)
{
getJSON(url, callback, errorCallback)
};
$.when(getLastImportTime()).pipe(buildUrl).then(makeRequest);
また、私のパイプメソッドは最初に呼び出されるようです:s