如果你在应用程序的后端使用过JavaScript进行编码,你可能对"promises"(承诺)有所了解。如果你对JavaScript中的承诺及其与代码的关系不太熟悉,它们基本上用于表示异步函数的最终调用/成功/失败。异步函数或操作是不在解释时运行的函数,可以与其他操作并行运行。相反,同步代码一次只运行一个操作,没有能力同时发送多个请求。
异步编程是我们后端技术的核心,因为它允许我们指定异步代码的“网”,以捕捉传入或传出的请求,并随时发送多个请求。
承诺的结构与函数的体结构相同,但我们可以在函数调用的末尾使用`.then`来指定对承诺的返回值进行的下一步操作。我们只需将返回的值命名为我们想要的任何名称,并在`.then`块中对其进行操作,形成一个承诺链。这可以是向用户显示一些内容,也可以是向另一个端点发送另一个请求。在处理错误时,需要确保通过处理承诺解析可能出现的错误来保证良好的开发体验。使用承诺的设置,我们需要在`.then`块之后使用`.catch`块来处理可能出现的任何错误,否则我们将无法获取任何信息来调试我们的代码。承诺的美妙之处在于它们始终存在,等待我们的应用程序或用户使用它们来处理幕后的魔法。总之,传统承诺链存在一些问题,特别是不易读。异步代码可能庞大、令人生畏,难以阅读或理解。年轻和老的程序员都曾经历过“回调地狱”的困扰。
这就是ES6发挥作用的地方。
在ES6或ECMAScript(2015)发布之际,引入了async/await语法。这是一种编写承诺的新方式,极大地减少了传统承诺的复杂性和威慑力。Async/await本质上与承诺相同,但提供了更短、更简洁的代码。它有助于使异步代码的丛林变得更加可管理。它可能看起来并不起眼,但当你看着数千行异步代码时,这种语法提供的好处是无与伦比的。这种新的语法对新手程序员来说可能有点难以理解,尤其是在已经相对令人困惑的承诺工作方式的基础上。主要的语法区别在于你必须在函数声明中使用`async`关键字声明一个异步函数,而`then`和`catch`的代码块现在分别变成了`try`和`catch`。随之而来的是在这些块中使用`await`关键字,告诉我们的程序在等待承诺解析时将其分配给一个变量,这也消除了对多个承诺使用`Promise.all`的必要。总的来说,两者之间有一些细微的差别,但学会它们可以节省潜在的时间浪费和可能带来的巨大承诺链头痛。
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!