async and await 是promise的语法糖
More recent additions to the JavaScript language are async functions and the await keyword, added in ECMAScript 2017.
这些功能就是promises的语法糖,making asynchronous 代码容易写和读点。
他们让async code看山去想old-school的synchronous代码。
他们值得去学习。
The async keyword is added to functions to tell them to return a promise rather than directly returning the value.
await only works inside async functions within regular JavaScript code
Try typing the following lines into your browser's JS console:
there are a number of JavaScript libraries and frameworks that enable module usage (for example, other CommonJS and AMD-based module systems like RequireJS, and more recently Webpack and Babel).
这些功能就是promises的语法糖,making asynchronous 代码容易写和读点。
他们让async code看山去想old-school的synchronous代码。
他们值得去学习。
The async keyword is added to functions to tell them to return a promise rather than directly returning the value.
await only works inside async functions within regular JavaScript code
Try typing the following lines into your browser's JS console:
there are a number of JavaScript libraries and frameworks that enable module usage (for example, other CommonJS and AMD-based module systems like RequireJS, and more recently Webpack and Babel).
function hello() { return "Hello" };
hello();The function returns "Hello" — nothing special, right?
But what if we turn this into an async function? Try the following:
async function hello() { return "Hello" };
hello();Ah. Invoking the function now returns a promise. This is one of the traits of async functions — their return values are guaranteed to be converted to promises.
let hello = async function() { return "Hello" };
hello();let hello = async () => "Hello";
These all do basically the same thing.
-------------------------------------------------------------
-------------------------------------------------------------
hello().then((value) => console.log(value))
or even just shorthand such as
hello().then(console.log)
fetch('coffee.jpg')
.then(response => {
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return response.blob();
})
.then(myBlob => {
let objectURL = URL.createObjectURL(myBlob);
let image = document.createElement('img');
image.src = objectURL;
document.body.appendChild(image);
})
.catch(e => {
console.log('There has been a problem with your fetch operation: ' + e.message);
});
By now, you should have a reasonable understanding of promises and how they work, but let's convert this to use async/await to see how much simpler it makes things:
async function myFetch() {
let response = await fetch('coffee.jpg');
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
let myBlob = await response.blob();
let objectURL = URL.createObjectURL(myBlob);
let image = document.createElement('img');
image.src = objectURL;
document.body.appendChild(image);
}
myFetch()
.catch(e => {
console.log('There has been a problem with your fetch operation: ' + e.message);
});async function myFetch() {
let response = await fetch('coffee.jpg');
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return await response.blob();
}
myFetch().then((blob) => {
let objectURL = URL.createObjectURL(blob);
let image = document.createElement('img');
image.src = objectURL;
document.body.appendChild(image);
}).catch(e => console.log(e));
阅读量: 969
发布于:
修改于:
发布于:
修改于: