【发布时间】:2020-09-24 00:49:01
【问题描述】:
我很难理解 ES6 Promises 和 Async/await。
我在 youtube 上查找了解释这些主题的视频,但我仍然无法思考它们之间有什么区别,我应该何时使用 Promises 而不是 Async/await 或 Async/await 而不是 Promises?
我什么时候知道我的代码是“有效”的 promises 还是 async/await。
这里有两个示例(两个都有效),它们从我的本地 JSON 服务器获取“公司”,完成后,它会循环访问这些公司。
第一个例子:(使用 Promises)
function getCompanies() {
return new Promise((resolve, reject) => {
fetch(`http://localhost:3000/companies`)
.then(response => response.json())
.then(response => resolve(response))
.catch(error => reject(error))
})
}
function loopCompanies(companies) {
companies.forEach((company) => {
console.log(company);
})
}
getCompanies().then(response => loopCompanies(response)).catch(error => console.log(error));
第二个例子:(使用 Async/await)
async function getCompanies() {
let response = await fetch(`http://localhost:3000/companies`);
let processedResponse = await response.json();
return processedResponse
}
function loopCompanies(companies) {
companies.forEach((company) => {
console.log(company);
})
}
async function doIt() {
try{
let response = await getCompanies();
loopCompanies(response)
} catch(error) {
console.log(error)
}
}
doIt()
所以我不知道在示例 1 中是否应该这样使用 Promises?
在示例 2 中我应该如何使用 Async/await ?
它们之间有什么区别
【问题讨论】:
-
第一个示例是不必要地将您的结果包装在手动创建的 Promise 中。根本不需要这样做,这是一种反模式。你可以做
return fetch(...).then(...);。 -
async/await是 promise 的语法糖。它只是提供在某些情况下可能更好或对某些人更可取的替代语法。 Promise 和async/await只是相互替代。 -
@jfriend00 就这样? ``` function getCompanies() { return fetch(
http://localhost:3000/companies) .then(response => response.json()) .then(response => loopCompanies(response)) .catch(error => reject(error)) } function loopCompanies(companies) { Companies.forEach((company) => { console.log(company); }) } ``` 那么示例 2 呢? -
@VLAZ 回答了我的一个问题,谢谢
-
不,不是那样的。请参阅我发布的答案中的代码。
标签: javascript asynchronous promise async-await