Textboxで新規ページを作成してから、そのページを表示させる非同期処理
code:script_old.js
function makePage(file){
openfile(nowPage);
appendtext("list/ページ呼出.md","[+ file.slice(5,-3) + "]");
mainPage.drawPage(nowPage);
}
このまま実行すると、openfileで新規ファイルが作成された直後にmainPage.drawPageが実行されて、その段階ではまだ新規ファイルができていないので、ページ描写がうまくいかない。
code:script.js
function makePage(file){
openfile(nowPage);
var wait = function(sec) {
return function() {
return new Promise(function(resolve/*, reject*/) {
setTimeout(resolve, sec*1000)
});
}
};
Promise.resolve()
.then(wait(1)) // ここで1秒待つ(「Promiseオブジェクトを返す関数」を thenに渡しています)
.then(function() {
mainPage.drawPage(nowPage);
})
.catch(function (err) {
console.error(err);
self.result_message = error;
});
appendtext("list/ページ呼出.md","[+ file.slice(5,-3) + "]");
}
これで確実に1秒まった後で、ページ描写が行われる。
確実性を期すならもうちょっと待ってもいいが、とりあえずは1秒で運用する。
ref.
JavaScriptで一定時間待ってから処理を開始する方法 – ラボラジアン
JavaScript で関数の終了を待つ | Delft スタック