推荐 最新
销售经理537

哪些场景下使用await/async更好?哪些场景下使用then更好?

哪些场景下使用await/async更好?哪些场景下使用then更好? 我的认为await/async的出现是为了改善then的使用,当比较复杂的时候,await/async会起到作用,当问题比较简单的时候用then。但是我们还是应该选择其中一种,这样代码风格比较统一。 例如我下面这个需求使用的await/async不知道是否合适(是不是变得麻烦了?) 工作1:获得选择列表,并默认选择全部。 工作2:根据选择的单位和其他信息向服务端发送请求,获取数据之后根据数据刷新页面 当初始加载该页面的时候,整合工作1和工作2。 async function getDwSelections() { try { const result = await getDwList(); if (!result.isSucceed) throw new Error("获取单位列表失败,错误信息:' + result.errMsg") const data = result.data[0].datas console.log("dw selections: ", data); dwSelections.value.push({ value: "全部", label: "全部" }) for (const item of data) { dwSelections.value.push({ value: item.dwdm, label: item.dwmc }) } selectedDw.value = "全部"; } catch (error) { const errorMessage = error instanceof Error ? error.message : error; throw new Error(errorMessage); } } async function query() { try { const result = await getTableData({dwdm: selectedDw.value === "全部" ? '' : selectedDw.value, ny: selectedDate.value}) if (!result.isSucceed) throw new Error("获取数据失败,错误信息:" + result.errMsg) rqToDm.value = {}; const data = result.data[0].datas; const newTableData = new Map(); const newDateFields = new Set(); const currentDate = common.getCurrentDate("yyyy-MM-dd"); for (const entry of data) { if(entry.rqdm > currentDate) continue; if (newTableData.has(entry.jlid)) { newTableData.get(entry.jlid)[entry.rq] = entry.rjql; } else { newTableData.set(entry.jlid, { jlid: entry.jlid, ny: selectedDate.value, dwmc: entry.dwmc, jqd: entry.jqd, dlgs: entry.dlgs, jqfs: entry.jqfs, ljjql: entry.ljjql, rpjql: entry.rpjql, ljdsl: entry.ljdsl, [entry.rq]: entry.rjql }) } newDateFields.add(entry.rq) rqToDm.value[entry.rq] = entry.rqdm; } dateFields.value = Array.from(newDateFields).map(e => { return {"label": e, "prop": e}; }); tableData.value = Array.from(newTableData.values()); } catch (error) { const errorMessage = error instanceof Error ? error.message : error; throw new Error(errorMessage); } } onMounted(async () => { loading.value = true; try { await getDwSelections(); await query() } catch (error) { ElMessage.error(error.message); } loading.value = false; }) 附:代码中有什么其他问题也欢迎指正。

0
1
0
浏览量210
应该是最帅的鹅

vue2中,这两种异步书写方式,为何第二种没有反应,不显示出导入成功提示?

importPolicemanList({ fileId: fileId[0].id }).then(()=>{ this.$message.success("导入成功"); }); (正确,能显示导入成功) --------------------上下两者等价吧,为何下面的当时不显示导入成功------------------ try{ await importPolicemanList({ fileId: fileId[0].id }) this.$message.success("导入成功"); }catch(err){ this.$message.error(`${err}`); }(错误,什么都不显示) 希望能得到正确的结果!

0
1
0
浏览量173
ApplePro

使用async await时如何在不确定时间的回调函数中退出?

const a = (): Promise => { return new Promise((resolve) => { const callback = (mutations: MutationRecord[]) => { // 监听按钮的某个属性变化,此处退出函数 resolve(); }; const observer = new MutationObserver(callback); observer.observe(buttonEl, { attributes: true, }); // 调用一个Promise函数,成功后触发按钮的点击事件,然后监听按钮的属性变化 p().then(() => { buttonEl.click(); }); }); }; const b = async (): Promise => { const callback = (mutations: MutationRecord[]) => { // 监听按钮的某个属性变化,怎么在此处退出函数? }; const observer = new MutationObserver(callback); observer.observe(buttonEl, { attributes: true, }); // 调用一个Promise函数,成功后触发按钮的点击事件,然后监听按钮的属性变化 await p(); buttonEl.click(); }; 如上述示例代码,"a"是常规的Promise写法,现在想要改成"b"那样的async写法,请问该怎么办? 想要这么改的原因是函数内部的逻辑逐渐复杂,会调用多个Promise函数,常规写法会陷入层层嵌套的窘境,不利于维护。

0
1
0
浏览量149
今天吃什么你说吧

JS POST 失败,POSTMAN 发成功?

JS POST 不执行 "fetch(url" ,直接到 "catch(ex){FR.Logger.error(ex);FR.Msg.toast(FR.i18nText('Custom')+'JS'+FR.i18nText('Error')+' : '+ex.message);}}).createDelegate(this, [], 0).apply(this, arguments)" 代码如下 debugger; const url = 'http://***'; const username = '*****'; const password = '*****'; const Body = { "approver": "N8181820", "factory": "2022", "name_of_parts": "ame_of_parts", "document_number": "NNNNN", "machine_tool_type": "machine_tool_type", "new_version_number": "w_version_nu", "program_name": "program_name", "part_drawing_number": "part_drawin", "auditor": "N8181820", "issuing_nature": "issuing_nature", "list": [ { "sequence_number": "111111111", "field1": "12", "modify_type": "22", "field3": "21321", "field2": "123", "field5": "3213", "field4": "321312" } ], "applicant": "N8181820", "program_number": "ogram_number", "attachment": "attachment", "procedure_description": "edure_descrip", "application_time": "2024-06-23", "machine_number": "machine_numbe", "tzid": "10001", "group_counter": "group_counter", "original_version_number": "ginal_versio", "operation_number": "operation_numbe", "material_code": "material_code" }; fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': 'Basic ' + btoa(username + ':' + password) }, body: JSON.stringify(Body) }) .then(response => { if (!response.ok) { throw new Error('Network response was not ok ' + response.statusText); } return response.json(); }) .then(data => { // 处理响应数据 console.log(data); }) .catch(error => { // 处理错误 console.error(error); });

0
1
0
浏览量144
UX_siri

Python 异步编程的问题 Asyncio ?

我发现 "await" 并没有用 "update_product_loop" 还是立刻就执行力,那 "await" 和 "async" 的到底是什么含义,以及我要怎么才能做到真正的等 异步任务 "a" 完成再去其它呢,就是说 "a" 里有很多子任务是异步的 async def main(): for page in JDServer.api("api/product/getPageNum"): if products_insert_on: await recursion_products_init(page["page_num"]) update_product_loop() if category_insert_on: recursion_sync_category(page["page_num"]) async with asyncio.TaskGroup() as tg: tg.create_task(update_product_category()) tg.create_task(update_products_price()) asyncio.run(main())

0
1
0
浏览量16