表白:黑白圣堂血天使,天剑鬼刀阿修罗。';
讲解对象:/async function delayedCode() {} 怎么理解
作者:融水公子 rsgz
===async function delayedCode() {}async function delayedCode() {} 是一个声明了异步操作的函数。在JavaScript中,使用关键字 async 来定义一个异步函数。异步函数可以包含异步操作,并通过使用 await 关键字来等待异步操作完成。function delay(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } async function delayedCode() { ye_num=ye_num+1 // 页码加1 await delay(1000); document.querySelectorAll('input#selectAll')[0].click(); // 全选 await delay(1000); document.querySelectorAll('a[sxz="batchCaculatedShipping"]')[0].click(); // 批量编辑 await delay(1000); document.querySelectorAll('button.button.btn-determine[onclick="batchCaculatedShipping(this);"]')[0].click() // 确定 await delay(1000); checkAndClick_wancheng(); // 状态出现已完成 就点击下面的 关闭 按钮 await delay(1000); document.querySelectorAll('div.paging-box.tab-nav.page-up')[0].querySelectorAll('a[title="下一页"]')[0].click() // 如果出现关键字 ye_num.toString()+'/' 就开始新一轮的 delayedCode() await delay(1000); checkAndClick_a_dijiye(ye_num); } delayedCode();在这个特定的代码中,delayedCode 函数是一个异步函数,它使用了异步操作来延迟执行一系列的代码片段。通过使用 await delay(1000),它等待一秒钟(1000毫秒)以确保前一个操作完成后再执行下一个操作。
异步函数通过返回一个 Promise 对象来控制其执行状态。如果函数中没有显式地返回任何内容,那么实际上它会隐式地返回一个已解析(resolved)的 Promise 对象。
在代码的最后,通过调用 delayedCode() 函数来触发该异步函数的执行。由于函数中包含了异步操作和 await 关键字,整个执行过程会被暂停并按顺序逐步执行异步操作,直到所有的异步操作都完成为止。
那么还有一个问题:为什么将Promise+async+await这三个结合在一起使用呢?1 异步操作的简化:Promise+async+await 的组合可以大大简化异步操作的编写和处理。传统的回调函数方式可能导致嵌套过深的回调函数(回调地狱),而使用 Promise 和 async/await 可以将异步操作的逻辑表达得更加清晰和易于理解。
2 顺序控制:使用 await 关键字可以在异步操作中实现顺序控制,即等待一个异步操作完成后再执行下一个操作。这样可以避免回调函数中的层层嵌套,使代码逻辑更加线性和可读性更高。
3 错误处理:通过结合 Promise 的 reject 和 catch、async 函数的 try-catch 机制,可以更方便地进行错误处理。使用 try-catch 可以捕获异步操作中的异常,并使用 catch 块来处理错误情况,提供了更强大且易于理解的错误处理机制。
4 可链式调用:Promise 对象本身具有可链式调用的特性,可以通过 then 方法将多个异步操作串联起来。而 async/await 结合 Promise,则可以在写法上更加简洁和直观地表示异步操作的顺序关系。综上所述,将 Promise、async 和 await 这三个组合在一起使用,能够简化异步操作的编写、顺序控制、错误处理,并提高代码的可读性和可维护性。
===公众号:不浪仙人谢谢大家的支持!可以点击我的头像,进入我的空间浏览更多文章呢。建议大家360doc[www.360doc.com]注册一个账号登录,里面真的有很多优秀的文章,欢迎大家的到来。
---
联系客服