たとえば、別の非同期関数とともにcrypto.randomBytes(...)
のランダムジェネレータを作成しています。コールバック地獄に落ちるのを避けるために、私はcrypto.randomBytes
の同期機能を使用することができました。私の疑問は、コードを実行するたびに私のノードプログラムが停止するということです。次に、実行する時間が非常に短い非同期関数のリストがある場合、これらが同期関数として機能する可能性があると考え、この関数リストを使って開発するのは簡単でしょう。どの機能がnode.jsで同期として動作するのですか?
1
A
答えて
2
mz
モジュールを使用すると、crypto.randomBytes()
が約束を返すことができます。あなたはこのようにそれを使用することができます(--harmony
フラグを使用してノード7.xで利用可能)await
を使用する:
let crypto = require('mz/crypto');
async function x() {
let bytes = await crypto.randomBytes(4);
console.log(bytes);
}
x();
は上記のことはブロックしているように見えるにもかかわらず、ノンブロッキングです。
function timeout(time) {
return new Promise(res => setTimeout(res, time));
}
async function x() {
for (let i = 0; i < 10; i++) {
console.log('x', i);
await timeout(2000);
}
}
async function y() {
for (let i = 0; i < 10; i++) {
console.log('y', i);
await timeout(3000);
}
}
x();
y();
そして、これら2つの関数は、実行するために多くの時間がかかりますが、彼らはお互いをブロックしないことに注意してください:より良いデモンストレーションのために
は、この例を考えてみましょう。私はそれが持つ非同期の選択ではないということを証明するためにあなたにこれらの例を示し
node script-name.js
:と
node --harmony script-name.js
またはノード8.xのとを:使用してノード7.xのと
実行してコールバック地獄と素晴らしいコードとの同期。実際には、新しいasync function
とawait
オペレータのES2017を使用して、非常にエレガントな方法で非同期コードを実行することができます。多くの人がその機能について知っているわけではありません。
0
彼らは非同期であり、対処することを学びます。
Promises今、将来的にはES2017のawait
とasync
はあなたの人生を楽にします。
BluebirdspromisifyAll
は、標準のNode.jsコールバックAPIを処理する場合に非常に便利です。これは、コールバックを要求するのではなく、約束を返すAsync
というタグが付いた関数を追加します。
const Promise = require('bluebird')
const crypto = Promise.promisifyAll(require('crypto'))
function randomString() {
return crypto.randomBytesAsync(4).then(bytes => {
console.log('got bytes', bytes)
return bytes.toString('hex')
})
}
randomString()
.then(string => console.log('string is', string))
.catch(error => console.error(error))
関連する問題
- 1. .forEach()が非同期で動作するのはなぜですか? - node.js
- 2. ブラウザ同期機能の動作
- 3. Node.js:サーバとしての特別な機能をどのように起動して初期化するか?
- 4. 非同期機能が動作していませんAndroid
- 5. Node.jsがマイクロサービスサービスとして機能する
- 6. node.jsの約束と機能を同期させる方法
- 7. 高レベルで、どのようにgradle同期がAndroidで機能しますか?
- 8. なぜ同期が機能しないのですか?
- 9. 非同期は、私が期待どおりに動作、次の機能を持っているのforEach
- 10. どのようにクーダカーネル機能の間で同期する?
- 11. MQSeries:MCBと非同期で同期ポイント/ロールバックが可能ですか?
- 12. 同期メソッドが同期として動作しない
- 13. Angular Keystrokesが同期して動作しないのはなぜですか?または、どうすれば同期させることができますか?
- 14. プロミス/ A +と、非同期性がJavascriptでどのように動作するか
- 15. Node.jsのArray.forEachは非同期ですか?
- 16. Dropboxの同期はどのように機能しますか?
- 17. 一部のファイルで[アクティブドキュメントと同期]ボタンが機能しない
- 18. JestJSで同期コードをテストすると非同期動作が発生する
- 19. implicitwait()との同期が機能しません、なぜですか?
- 20. 同じイメージリサイズとイメージクロップ機能は、Winformsアプリケーションで動作し、同じソリューションのWebapiアプリケーションでは機能しません。
- 21. 非同期メソッドでこの同期ラッパーが機能するのはなぜですか?
- 22. 非同期/ Webブラウザまたはnode.jsで待機していますか?
- 23. Node.jsでは、イベントループはどのように機能しますか?
- 24. Node.js非同期並列が動作しない方法は?
- 25. angularjsコントローラ機能が期待どおりに動作しない
- 26. Linuxカーネルタイマー機能はどのコンテキストで動作しますか?
- 27. KOAは、非同期機能でクライアントに値を送ったことができないのNode.jsが、外
- 28. 角度2で複数の非同期チェーン機能を動作させることができません
- 29. Node.jsの非同期/同期
- 30. 非同期コードをNode.jsのスレッドとして扱いますか?
あなたの質問は何ですか? – jfriend00