必须在包含函数上使用async关键字才能在函数体内使用await。
async function fetchMovies() {
const response = await fetch('/movies');
console.log(response);
}
fetchMovies();
Run Code Online (Sandbox Code Playgroud)
在AWAIT被用来对异步完成方框取()调用。从代码中可以看出,函数fetchMovies()甚至没有返回任何值。即使这样做了,它也会影响调用者使用返回值的方式,但是为什么它会影响从函数体调用另一个异步调用呢?
我的问题是为什么需要这样做?有什么好的解释吗?它是否与实际实现await的需要有关,并在旧的 JavaScript 版本中支持它?
我知道使用了iffi模式能够使用await但这是否会以任何方式更改iffi代码块后面的代码的语义?
(async () => {
const response = await fetch('/movies');
console.log(response);
})();
Run Code Online (Sandbox Code Playgroud)
我也知道模块中支持顶级等待。
可能是我错过了一些非常明显的东西。
我一直看到Silverlight中使用的关键字async,但是想知道是否有人对虚拟对象的解释是什么以及何时使用它及其好处.如果你能解释,请大家好评.谢谢.
我一直试图理解as#/ await和C#中的任务,但是尽管观看了YouTube视频,阅读文档和遵循复数课程,但仍然失败了.
我希望有人可以帮助回答这些略微抽象的问题,以帮助我的大脑.
1.为什么他们说async/await在它自己的async关键字什么都不做并且await关键字添加一个暂停点时启用'asynchonrous'方法?是不是添加了一个暂停点,强制该方法同步动作,即在继续之前完成await标记的任务.
2.显然除了事件处理程序之外你不应该使用async void,那么你如何正常调用异步方法呢?似乎为了使用await关键字调用异步方法,调用它本身的方法/类需要标记为async.我见过的所有示例都"启动"了一个带有事件处理程序的异步void方法.你如何"逃避"async/await的包装以运行该方法?
3.
public async Task SaveScreenshot(string filename, IWebDriver driver)
{
var screenshot = driver.TakeScreenshot();
await Task.Run(() =>
{
Thread.Sleep(2000);
screenshot.SaveAsFile(filename, ScreenshotImageFormat.Bmp);
Console.WriteLine("Screenshot saved");
});
Console.WriteLine("End of method");
}
Run Code Online (Sandbox Code Playgroud)
回到1.这看起来像一个同步方法.执行在到达时暂停Task.Run,因此Console.WriteLine("End of method");在任务完成之前不会执行.也许整个方法本身将在代码中触发它时异步执行?但回到2,你需要等待调用它,否则你得到消息'因为这个调用是不等的...'因此添加await将导致该执行点是同步的等等.
任何帮助理解这一点将非常感激.