Javascript 角度及;异步/等待
我在angular应用程序中使用以下内容:Javascript 角度及;异步/等待,javascript,angular,asynchronous,async-await,Javascript,Angular,Asynchronous,Async Await,我在angular应用程序中使用以下内容: let getName = greenlet( async username => { let url = `https://api.github.com/users/${username}` let res = await fetch(url) let profile = await res.js
let getName = greenlet( async username => {
let url = `https://api.github.com/users/${username}`
let res = await fetch(url)
let profile = await res.json()
return profile.name
})
console.log(await getName('developit'));
Angular似乎正在将“等待”改为“屈服”:
如何在Angular5应用程序中使用此选项?谢谢。Babel将浏览器中的async/await更改为生成器函数,该函数使用
yield
关键字。只有在正确的环境下,收益才会起作用;具体而言,下一阶段将确保产量
出现在生成器函数中(您可以阅读更多关于生成器的信息,但基本上它们是通过函数签名中的*来识别的,例如函数*doSomething()
)
如果您没有正确管理async
关键字,则不会创建生成器函数。Babel会将wait转换为生成器,但由于外部函数不是异步的,它不会创建生成器包装,因此会出现错误。某些IDE会在编译前报告此错误,但这就是您遇到的错误eeing的意思是
您提到这个console.log位于ngOnInit
生命周期钩子中;该函数调用本身不是异步的。您可以用异步来修饰它,但我不建议这样做(它可以工作,但它实际上意味着什么?)。您可以尝试显式调用async
函数,忽略返回的承诺:
ngOnInit() {
this.someFunction();
}
async someFunction() {
console.log(await getName('developit'));
}
现在我们假设,
greenlet
知道如何处理它所传递的异步函数(它解决了承诺吗?)您的代码示例是否被另一个异步函数包围?否则,您不允许在console.log调用中使用wait。getName内部的逻辑看起来很好。它只是位于Ngonit生命周期钩子中。我猜有一些步骤可以将ES8传输到ES6。但是,实际上,传输程序应该在第一名。谢谢你提供的信息。我使用的软件包在这里: