たとえば、別の非同期関数とともに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. Node.js:サーバとしての特別な機能をどのように起動して初期化するか?
- 2. 高レベルで、どのようにgradle同期がAndroidで機能しますか?
- 3. なぜ同期が機能しないのですか?
- 4. 非同期は、私が期待どおりに動作、次の機能を持っているのforEach
- 5. どのようにクーダカーネル機能の間で同期する?
- 6. MQSeries:MCBと非同期で同期ポイント/ロールバックが可能ですか?
- 7. Node.jsのArray.forEachは非同期ですか?
- 8. Dropboxの同期はどのように機能しますか?
- 9. 一部のファイルで[アクティブドキュメントと同期]ボタンが機能しない
- 10. Node.js非同期並列が動作しない方法は?
- 11. 非同期/ Webブラウザまたはnode.jsで待機していますか?
- 12. 非同期メソッドでこの同期ラッパーが機能するのはなぜですか?
- 13. angularjsコントローラ機能が期待どおりに動作しない
- 14. Node.jsでは、イベントループはどのように機能しますか?
- 15. Linuxカーネルタイマー機能はどのコンテキストで動作しますか?
- 16. 非同期コードをNode.jsのスレッドとして扱いますか?
- 17. 非同期プログラミングは、シングルスレッドプログラミングモデルでどのように機能しますか?
- 18. 非同期メソッドはC#でどのように機能しますか?
- 19. 同期GM_xmlhttpRequestは非同期で動作していますか?
- 20. 閉鎖機能のスコープでの予期しない動作
- 21. crypto.pbkdf2は非同期ですが、どうすれば同期として扱うことができますか?
- 22. 非同期機能を使用していないときに非同期エラーが発生しますか?
- 23. いくつかの同期動作と一部の非同期動作のコントローラ?
- 24. Java NIOノンブロッキングモードとnode.js非同期操作
- 25. Node.js fs.readFile()はPHPのfile_get_contents()として機能しますか?
- 26. すべてのブラウザでフェードアウト機能が動作しません
- 27. 同期コードと非同期コードの両方の機能で約束を拒否する方法は?私は同期と非同期コードの両方が含まれている機能を持って私のクラスで
- 28. cURLは機能しませんが、同じサイトがブラウザで動作します
- 29. node.jsジェネレータが期待どおりに機能しないのはなぜですか?
- 30. App ServiceプランとConsumption Planで動作するAzure機能の動作の違い。どうして?
あなたの質問は何ですか? – jfriend00