2
A
回答
1
MDN具有承諾的一個很好的定義:
甲諾表示[酮]異步操作的最終完成(或失敗),並且其結果值。
承諾不是關於重複發生的事件,它通常由您作爲回調傳遞的函數處理。
在許多情況下,回調的API可重構與承諾的工作:
request('file.txt', function (err, result) {
if (err) {
console.error('An error occurred:', err);
}
console.log(result);
});
使用的承諾,這可以被改寫爲:
request('file.txt')
.then(result => console.log(result))
.catch(err => console.log('An error occurred:', err));
然而,一個承諾可以解決只有一次。上面代碼片段中的request
函數可以封裝在承諾API中,因爲回調只能執行一次。但是,如果你處理多個事件與一個回調函數,它很難得到改寫使用承諾代碼:
server.on('request', function (req, res) {
// ...
});
你會如何改寫呢?
Observables將是解決這個問題的方法之一。它們允許您對多個異步操作做出反應。如果你開始做一些有關可觀測量的研究,你將會看到這個表格:
| | Singular | Plural |
|----------|----------------|-------------------|
| Spatial | Value | Iterable<Value> |
| Temporal | Promise<Value> | Observable<Value> |
相關問題
- 1. 回調還是承諾?
- 2. 創建一個承諾回調
- 3. 抽象函數爲了讓選擇返回承諾或回調
- 4. 回覆承諾的承諾
- 5. NodeJS:承諾內的回調
- 6. angularjs:鏈承諾返回一個承諾,而不是一個對象
- 7. Angular2承諾 - 返回已返回一個承諾
- 8. Node.js控制流:回調還是承諾?
- 9. 在另一個承諾中承諾的回報值
- 10. AngularJS承諾沒有回調?
- 11. 藍鳥承諾和回調
- 12. ES6承諾結算回調?
- 13. 從承諾中回報價值:回調或承諾?
- 14. 鏈接多個承諾(處理回調)
- 15. 如何做一個異步摩卡測試決心,而不返回一個承諾或調用完成回調
- 16. 在另一個承諾調用承諾,有條件
- 17. REStful API承諾調用另一個承諾
- 18. 返回一個依賴的承諾
- 19. 渲染承諾的整個對象的承諾值
- 20. 承諾完成後調用另一個原型方法
- 21. 爲什麼然後返回一個新的承諾,而不是返回承諾返回的onFulfilled
- 22. NodeJS - Q - 如何在另一個承諾中承諾承諾
- 23. 創建一個接受回調的api,並且還返回一個承諾
- 24. Angularfire2承諾完成不調用函數
- 25. Angularjs:$ Q承諾之前調用完成
- 26. jQuery的遞延 - 返回承諾了一個調用鏈
- 27. 承諾的回調函數,並在同一個函數
- 28. 藍鳥承諾作爲承諾回調不知道api
- 29. Git的變基承諾選擇
- 30. 返回一個AngularJS $ q承諾與TypeScript
兩者都用來處理異步編程。據我所知,使用promise的一個好處是避免回調地獄。請參閱https://javascript.info/promise-chaining –
如果沒有「回調」,承諾就無法存在 - 它們的構造函數和它們的'then'方法會帶上一些。 – Bergi
@Bergi ......好吧,再加上異步/等待,這些對你來說都是隱藏的。 –