js Promise 返回数组但无法使用 该如何返回结果呢? let element = document.querySelectorAll('.test') let promise = new Promise((resolve,reject) => { let imgs = [] for (var i = 0; i { console.log(e, e.length) }) 在这里打印e,可以看到是个数组,但e.length显示就是0;而且直接使用e[0]就是undefined
连接数据库和往数据库中写是异步执行的? 在"fullstackopen part3" (https://link.segmentfault.com/?enc=dvpX8unaUFky6dysf3axJw%3D%3D.qWZXhv2cFwh%2B3vKa4eqZ2Vuxb1t38tw213yaCoKvbw2HpWCPiKk%2F6A8MzonJGpKpuuLLNFJxto4GIqx%2F5%2Fdqsal8y75o4bdojRUMGpReNi8hdU9oLNGT2bsVKJI93cBBqtxORjq7HtaJgjLKolNqWg%3D%3D)看到这样一段代码,没有等到连接数据库完之后就执行了往数据库中写的操作,这样写合理吗? "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241008/11ffb383ea3a339050d80c825245f6eb.png) 还有下面这段代码我也觉得不合理,它将上面这段代码封装成了一个"module"。但是如果连接失败的话,返回的这个构造函数还是会被使用,直到报错为止。 "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241008/cf3b368c50f20ff94d09f2e5248a19b3.png) 我们写一段代码来使用这个"module"看看会发生什么 const Note = require("./note"); const note = new Note({ content: "hello world", important: true }); console.log(note); note .save() .then((result) => console.log("save successful!!")) .catch((error) => console.log(error)); "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241008/22744445b2180b5edbf6d58c44086b27.png) 1. 连接 2. 通过"Note"构造函数创建一个实体 3. 连接失败 4. 写入时间过程过长失败
现在有一个Service 如下: const getOSQueryBuilder = async (): Promise> => { return Database.getRepository(ConfigEntities) } class OSService { // 根据ID查询操作 static async getConfig(id: string): Promise { return new Promise((resolve) => { async function inquire(): Promise { const osQueryBuilder = await getOSQueryBuilder() const data = osQueryBuilder.findOne({ where: { id } }) resolve(data) } inquire() }) } } 但是我觉得这个static 异步方法很繁杂, 想要使用rxjs进行整改,让代码变得简洁。请问是否有大神可以指导一下呢?
请求接口的代码: import fetch from "node-fetch"; fetch("https://api.openai-sb.com/v1/moderations", { method: "POST", headers: { Authorization: "Bearer ***********", "Content-Type": "application/json", }, body: JSON.stringify({ input: "树上有九只鸟,开枪打死一只,请问树上还剩几只鸟?" }), }).then(data => { console.log(data) });
如何优雅地细粒度管理错误捕获? 比如我有下面这段代码 async function xxx() { const result1 = await getInfo1() const result2 = await getInfo2(paramsBasedResult1) ... } 错误捕获? async function xxx() { try { const result1 = await getInfo1() try { const result2 = await getInfo2(paramsBasedResult1); .... }catch(error) { ... } }catch(error) { .... } } 一层套一层给我感觉就像是回调地狱。 以我这段代码为例(下面是我做的错误处理的方式,可以将try catch去掉,去实现你自己的错误捕获处理) async function loadChart() { // 1. 获取管理区代码 // 2. 拼接管理区代码,发送请求 // 3. 处理数据 // option.xAxis.data = [] option.series = [] try { const params1 = { gs_id: 'xxNnrViL4f', p_id: 'xxNnrViL4f' }; const result1 = await getOrgTree(params1); if (!result1.isSucceed) throw new Error(result1.errMsg); try{ const mergeGlqdm = result1.data[0].datas.reduce((pre, cur) => pre + "," + cur.code, "").slice(1); const params2 = { glqdm: mergeGlqdm, xmdm: props.xmdm, ksrq: props.ksrq, jsrq: props.jsrq } const result2 = await getChartData(params2); if (!result2.isSucceed) throw new Error(result2.errMsg); const data = result2.data[0].datas; let preRq = "9999-99-99"; let isCollectAllDate = false; for (const item of data) { if (item.rq > preRq) { option.series[option.series.length - 1].data.push(item.zbz); } else { option.series.push({ data: [item.zbz], type: "line", name: `系列${option.series.length + 1}` }) if (preRq !== "9999-99-99") { isCollectAllDate = true; } } if (!isCollectAllDate) option.xAxis.data.push(item.rq); preRq = item.rq; } myChart.setOption(option); }catch(error) { ElMessage.error("获取曲线数据失败,错误信息:" + error.message) } }catch(error) { ElMessage.error("获取分管理区数据失败,错误信息:" + error.message); } }
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20240921/6b001b47c440f5b938ab456cb710e895.png) vue的自定义事件完成后才执行下面的console.log吗,还是怎么执行 请告知!
我发现 "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())