私は単純な一連のイベントを持っています:
- メタデータ テーブルから列を取得する (非同期)
- 選択した列をロードする (非同期)
- レンダリング リスト
以前はこれらの関数を連鎖させ、それぞれが完了すると次の関数を呼び出していました。ただし、何が起こっているのかはあまり明白ではありません (呼び出すgetColumnsFromMeta
と、ビューが取り込まれます)。したがって、明確さとコードの再利用のために、これらを使用してリファクタリングしたいと思いJQuery
Promises
ます。私は以前にプロミスを使用しました。しかし、どうすれば 2 つ以上連鎖させることができるでしょうか?getColumnsFromMeta ().then(loadSourceFromDatabase /*some arguments*/) //.then(renderList)?;
の例を次に示しgetColumnsFromMeta
ます。
var getColumnsFromMeta = function(id)
{
var sql,
dfd;
dfd = $.Deferred();
var onSuccess = function(tx, result)
{
var columns = [];
for (var i = 0; i < result.rows.length; i++)
{
columns.push(result.rows.item(i).Column);
}
dfd.resolve(columns);
};
var onError = function(tx, error)
{
dfd.reject(error);
};
sql = "SELECT Column FROM Meta WHERE id = ?";
database.query(sql, [id], onSuccess, onError);
return dfd.promise();
};