#author("2024-05-28T17:11:40+09:00","","") #author("2024-10-25T18:42:18+09:00","default:liaodongcheng","liaodongcheng") *[[javascript]] [#la6753b1] 二.同步异步 1.sync+await+promise的任务链实现 /** * 第一个任务 */ function task1 () { return new Promise(resolve => { setTimeout(() => { console.log('1', '我是第一个任务,必须第一个执行'); resolve('done'); }, 3000); }); } /** * 第二个任务 */ function task2 () { return new Promise(resolve => { setTimeout(() => { console.log('2', '第二个任务'); resolve('done'); }, 1000) }); } /** * 第三个任务 */ function task3 () { return new Promise((resolve, reject) => { setTimeout(() => { console.log('3', '第三个任务'); reject('error'); }, 1000); }); } /** * 第四个任务 */ function task4 () { return new Promise(resolve => { setTimeout(() => { console.log('4', '第四个任务'); resolve('done'); }, 2000); }) } /** * 所有任务 */ async function allTasks () { await task1(); await task2(); await task3(); await task4(); } // 执行任务 allTasks(); /** * 3秒后 * 1 我是第一个任务,必须第一个执行 * 1秒后 * 2 第二个任务 * 1秒后 * 3 第三个任务 * Uncaught (in promise) error */ 如果要结合setInterval,可以这样写 var key = 0 function task1 () { return new Promise(resolve => { var intervalId=setInterval( function () { key = key+1 if (key>50) { console.log('1', '我是第一个任务,必须第一个执行'); resolve('done'); clearInterval(intervalId); } },100); }); } 2.循环异步的实现 operateOrderList = [1,2,3,4,5] async function f() { for (let i = 0; i < operateOrderList.length; i++) { await new Promise(function (resolve ) { setTimeout(function name() { orderImp(operateOrderList[i] , i); resolve(); } ,10000) } ) // await orderImp(operateOrderList[i] , i); } } f(); //试试用async/await来进行异步操作循环 async function orderImp(orderInfo , operateIndex ) { document.write(2); } 3.同步实现request查询 //查询字典 async function readDictionary(gameLevel) { // 定义要请求的URL const baseUrl = 'php/database.php'; // 准备参数 const params = { gameLevel: gameLevel }; // 将参数转换为查询字符串 const queryString = Object.keys(params).map(key => `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`).join('&'); console.log(queryString); // 使用 fetch API 发送请求 await fetch(`${baseUrl}?${queryString}`) .then(response => response.json()) .then((data) => {words = data }) .catch(error => { console.error('发生错误:', error); }); } 4.运算 5.string函数 6.数组