2017-06-25 15 views
3

私はasyncreadKey関数を書いた後、それぞれのキーがブラウザで押されているawaitと書いておきたいと思います。onkeypressイベントに応答するasync awaitコードを書き込む方法はありますか?

私はasync - awaitに基づいている、同期した通常見た目のコードにしたいと考えています。など

それでは、私は[ENTER]ユーザーのヒットまでawait readKey()を行うreadLine関数を記述し、ユーザーのヒット場合は、最後のキーを削除でき、[戻る]、

そして私はそのawait readLine()関数を書くことができます、そしてそれを呼び出す関数を書くことなど。

私はちょうどdocument.onkeypressハンドラを書いている間のギャップを埋める方法を知りません...そしてそのイベントのキーを私が書いていたある程度のasync readKeyに入れています。他の言語では、他のマルチスレッドプリミティブを使用してそこに到達することもできますが、jsの使い方を理解することはできません。私は値があるyieldにいくつかの方法があるかどうか把握しようとしていたが、私はそれを行う方法を見ることができません。

+0

依頼するもう一つの方法は、なぜ私は "document.readKeyを()待つ" ことができない、でしょうか? –

+0

どうしてそんなに失礼でしたか?私は私以外の人は何も言わなかった。おそらくあなたは自分自身に助言をしておくべきです。 –

答えて

3

はい。

カスタムを待つことはできますか?

はい - あなたはどんな場合でもPromiseを待つことができます。たとえば、タイムアウトを待つ場合:

const timerPromise = new Promise(resolve => setTimeout(resolve, 1000)); 
await timerPromise; 

キープレスは約束できますか?

はい - イベントが発生したときに約束を解決します。

 
function readKey() { 
    return new Promise(resolve => { 
     window.addEventListener('keypress', resolve, {once:true}); 
    }); 
} 
+2

OPのように振る舞う機会があれば、アプリケーション全体を 'async' IIFEに含める必要がありますか? '(async function(){...}());' https://jsfiddle.net/9yn4nnr6/ – Xotic750

1

@KornelへとXotic750 @おかげで、ここで私が探していたものです。

const readKey =() => new Promise(resolve => window.addEventListener('keypress', resolve, { once: true })); 

(async function() { 
    console.log('Press a key'); 
    const x = await readKey(); 
    console.log('Pressed', String.fromCharCode(x.which)); 

    console.log('Press a key'); 
    const y = await readKey(); 
    console.log('Pressed', String.fromCharCode(y.which)); 
}()); 
関連する問題