- Progressive Web Apps with React
- Scott Domes
- 278字
- 2021-07-08 09:36:24
What is a promise?
The problem with JavaScript is that it often deals with asynchronous operations. These are steps that the code must complete which don't follow a linear flow in time. Normally, code runs line by line, one after the other, but what happens when we need to call an API that takes a random number of seconds to respond? We can't just stop our code and wait, and we will still have certain lines of code to execute once that call is complete, whenever that is.
The solution used to be callbacks. If we were using firebase.auth().signInWithEmailAndPassword in this manner, it would look like this:
firebase.auth().signInWithEmailAndPassword(email, password, function() {
// Do something when the sign in is complete.
});
We would pass it a callback that is called when the operation is complete. This approach works fine, but can lead to some ugly code: specifically, something called the pyramid of doom, or callback hell, where nested callbacks lead to sloping code:
firebase.auth().signInWithEmailAndPassword(email, password, function() {
onLoginComplete(email, password, function() {
onLoginCompleteComplete('contrived example', function() {
anotherFunction('an argument', function () {
console.log('Help I'm in callback hell!');
});
});
});
});
To make working with asynchronous functions easier and cleaner, the people behind JavaScript implemented promises. Promises have a simple syntax: pass one function to a .then statement to be called when the operation is a success, and another to a .catch statement when the operation is a failure:
firebase.auth().signInWithEmailAndPassword(email, password)
.then(() => { // Do something on success })
.catch(err => { // Do something on failure. })
Now, our code is nice and readable, and we know exactly what code will be run when the operation is complete.
- 大學計算機基礎(第二版)
- C語言實驗指導及習題解析
- 手把手教你學C語言
- GeoServer Beginner's Guide(Second Edition)
- Modern JavaScript Applications
- Learning Zurb Foundation
- Mastering ROS for Robotics Programming
- 區塊鏈架構之美:從比特幣、以太坊、超級賬本看區塊鏈架構設計
- 嵌入式Linux C語言程序設計基礎教程
- 高效使用Greenplum:入門、進階與數據中臺
- XML程序設計(第二版)
- Mastering ArcGIS Server Development with JavaScript
- 讓Python遇上Office:從編程入門到自動化辦公實踐
- Analytics for the Internet of Things(IoT)
- Illustrator CS6中文版應用教程(第二版)