例如,我正在編寫一個隨機生成器,其中包含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();
並注意這兩個函數需要大量的時間來執行,但他們不會阻止對方。使用與節點7.x的
運行:
node --harmony script-name.js
或者與節點8.x中:
node script-name.js
我告訴你這些例子證明它不是異步的選擇與回調地獄,並與漂亮的代碼同步。實際上,您可以使用ES2017中提供的新0123B和await
運營商以非常優雅的方式運行異步代碼 - 很好閱讀它,因爲沒有很多人知道這些功能。
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. 以同步功能
- 2. WebKit可以訪問哪些功能?
- 3. Node.js的「LearnYouNode」雜耍異步功能不能正常工作
- 4. 網站的哪些功能可以取決於操作系統?
- 5. 我可以在Docker Nginx容器中放置哪些功能?
- 6. 這些功能中只有一個功能可以在同一時間工作嗎?
- 7. 異步功能不工作
- 8. 作爲ServiceLoader替代方案,還可以在Java中使用哪些功能?
- 9. 同步功能在java中如何工作?
- 10. Bootbox.confirm可以同步工作嗎?
- 11. 殺異步功能的node.js
- 12. 如何在node.js中同步運行此功能
- 13. 可以對此功能進行哪些調整以獲得有效的功能
- 14. sharepoint中有哪些功能?
- 15. Clojure核心中的哪些功能可以保存meta?
- 16. 我現在可以使用HTML5的哪些功能?
- 17. wpf哪些功能?
- 18. 同步功能
- 19. 我可以使用Node.js中的所有Javascript功能/功能嗎
- 20. GetCallbackEventReference不能同步工作
- 21. 我怎樣才能知道哪些功能是可用的Node.js模塊
- 22. 進行異步功能同步對Node.js的REPL
- 23. 自Family.Show以來有哪些新功能?
- 24. UTL_MATCH的功能,可以與CLOB工作
- 25. 搖籃工程同步failed.Basic功能將無法正常工作
- 26. 功能在node.js中
- 27. 哪裏可以找到哪些功能已從PHP 5.4中刪除?
- 28. 如何通過node.js中的async同步功能?
- 29. 如何使node.js中的承諾同步功能
- 30. promisifying同步功能
究竟是什麼問題? – jfriend00