奇怪的一些

news2024/10/9 18:17:53

1、请求200
但是请求回来的是html
网络里会写 200OK from disk cache
这个时候需要清除浏览器缓存
2、base64 引入失败 找一个js文件直接引入
require is not defined
import Base64 from ‘***’
https://blog.csdn.net/u011383596/article/details/116712729
3、promise
promise:异步编程解决方案
promise相当于一个状态机,拥有三种状态pending、fulfilled、rejected
(1)一个promise对象那个初始化的状态是pending,调用了resolve后会将promise的状态扭转为fulfilled,调用reject后会将promise的状态扭转为reject,这两种扭转一旦发生便不能扭转该promise到其它状态
(2)promise对象原型上有一个then方法,then方法会返回一个新的promise对象,并将回调函数return的结果作为该promise resolve的结果,then方法会在一个promise状态被扭转为fulfilled或rejected时被调用。then方法的参数为两个函数,分别为promise对象的状态被扭转为fulfilled和rejected对应的回调函数。

new Promise((res,rej)=>{})
Promise.all().then((res)=>{})
this.getFormData().then((res)=>{})
  getFormData () {
      return new Promise((resolve, reject) => {
        this.$http.get('', {
          params: { taskId: this.taskId }
        }).then(res => {
          resolve(res.data.result)
        })
      })
    },

构造一个promise对象,并将要执行的异步函数传入到promise的参数中执行,并且在异步执行结束后调用resolve()函数,就可以在promise的then方法中获取到异步函数的执行结果

new Promise((res,rej)=>{
  setTimeout(()=>{
    resolve()
  },1000)
}).then()

Promise.all接收一个promise对象数组作为参数,只有全部的promise都已经变成fulfilled状态后才会继续后面的处理。Promise.all本身返回的也是一个promise

const promise1 = new Promise((res,rej) => {
  setTimeout(()=>{
    resolve('promise1')
  },1000)
})
const promise2 = new Promise((res,rej) => {
  setTimeout(()=>{
    resolve('promise2')
  })
})
Promise.all([promise1,promise2]).then()

Promise.race和Promise.all类似,只不过这个函数会在promise中第一个promise的状态扭转后就开始后面的处理(fulfilled、rejected均可)
配合async await使用:现在的开发中我们大多会用async await语法糖来等待一个promise的执行结果。async本身是一个语法糖,将函数的返回值包在一个promise中返回。

const p=async function f(){
  return '1'
}
p.then((res)=>{
  console.log(res)   //1
})

开发技巧:在前端开发上promise大多被用来请求接口,axios库也是开发中使用最频繁的库,但是频繁的try catch捕捉错误会让代码嵌套很严重。考虑如下代码的优化方式

const getUserInfo=async function(){
  return new Promise((res,rej)=>{
    //resolve()||reject()
  })
}
//为了处理可能的抛错 将try catch套在代码外面
try{
  const user= await getUserInfo()
}catch(err){}
//好的处理方法是在异步函数中将错误catch

async awite的写法在uniapp的文件上传中使用

// 获取上传状态
    async select (res) {
      console.log('选择文件:', res)
      await this.uploadFile(res.tempFilePaths[0]);
    },
    uploadFile (tempFilePaths) {}

使用async关键字可以让函数具有异步特征,但总体上其代码仍然是同步求值的。而再参数或闭包方面,异步函数仍具有普通js函数的正常行为。下面的foo()函数仍然会再后面的指令之前被求值。

async function foo(){
  console.log(1)
}
foo()//1

异步函数如果使用return关键字返回了值(如果没有return则会返回undefined),这个值会被Promise.resolve()包装成一个期约对象。异步函数始终返回期约对象。在函数外部调用这个函数可以得到它返回的期约。

async function foo(){
  console.log(1)
  return 2
} 
//给返回的期约添加一个解决处理程序
foo().then(console.log)
console.log(3)
//1
//3
//2

当然直接返回一个期约对象也是一样的

async function foo(){
  console.log(1)
  return Promise.resolve(3)
}

拒绝期约的错误不会被异步函数捕获

async function foo(){
  Promise.reject(3)//Uncaught (in promise):3
}

因为异步函数主要针对不会马上完成的任务,所以自然需要一种暂停和恢复执行的能力。使用await关键字可以暂停异步函数代码的执行,等待期解决。

let p=new Promise((resolve,reject) => setTimeout(resolve,1000,3))
p.then((X) => console.log(x)); //3

使用async/await可以写成这样

async function foo(){
  let p=new Promise((resolve,reject) => setTimeout(resolve,1000,3))
  console.log(await p)
}
foo()//3

async function bar(){
  return await Promise.resolve('bar')
}
bar().then(console.log)//bar

等待会抛出错误的同步操作,会返回拒绝的期约

async function foo(){
  console.log(1)
  await (() => {throw 3;})
}
//给返回的期约添加一个拒绝处理程序
foo().catch(console.log)//3

单独的Promise.reject()不会被异步函数捕获,而会抛出未捕获错误。不过,对拒绝的期约使用await则会释放(unwrap)错误值(将拒绝期约返回)。

async function foo(){
  console.log(1)
  await Promise.reject(3)
  console.log(4)//这行代码不会执行
}
//给返回的期约添加一个拒绝处理程序
foo().catch(console.log)
console.log(2)
//1
//2
//3

async/await中真正起作用的是await。async关键字,无论从哪方面来看,都不过是一个标识符。异步函数如果不包含await关键字,其执行跟普通函数基本上没有什么区别。
js运行时在碰到await关键字时,会记录在哪里暂停执行。等到await右边的值可用了,js运行时会向消息队列中推送一个任务,这个任务会恢复异步函数的执行。即使await后面跟着一个立即可用的值,函数的其余部分也会被异步求值。
如果await后面是一个期约,则问题会稍微复杂一些。此时,为了执行异步函数,实际上会有两个任务被添加到消息队列并被异步求值。

async function foo(){
  console.log(await Promise.resolve('foo'))
}
async function bar(){
  console.log(await 'bar')
}
async function baz(){
  console.log('baz')
}
foo()
bar()
baz()
//baz 
//bar
//foo

串行执行期约

function addTwo(x){ return x+2 }//或者 async function addTwo
function addThree(x){ return x+3 }
function addFive(x){ return x+5 }

async function addTen(x){
  for(const fn of [addTwo,addThree,addFive]){
    x=await fn(x)
  }
  return x;
}
addTen(9).then(console.log)//19

这里await直接传递了每个函数的返回值,结果通过迭代产生。当然,这个例子并没有使用期约,如果要使用期约,则可以把所有函数都改成异步函数。这样它们就都返回期约了。async function addTwo(x) {return x+2;}

  • 举例
//for循环不影响执行顺序 异步请求需要等待请求结果时影响 但使用方法类似
var sum = 0
    function testAsync() {
      return new Promise((resolve, reject) => {
        for (var i = 0; i < 10; i++) {
          sum += i
        }
        resolve(sum)
      });
    }

     function callerFun() {
      console.log("Caller");
      await testAsync().then((res) => {
        console.log(sum)
      });
      console.log("After waiting");
    }
    callerFun();
//等待请求结果
 async loadData (arg) {
      let data= await this.searchData(arg)
      //findnode需要searchData的请求结果
      await this.findnode(data).then((resolve)=>{
        //获取数据
        this.dataSource=resolve
      })
    },
    searchData (arg) {
     return new Promise ((resolve,reject)=>{
         getAction(this.url.list, params).then((res) => {
          if (res.success) {
            resolve(res.result.records)
          } else {
            reject()
            this.$message.warning(res.message)
          }
        })
     })
    },
    findnode (data) {
      return new Promise((resolve, rej) => {
       data.map((i,index) => {
          let param = {}
          param.id = i.id
          getAction('/jeecg-system/sys/ext/queryByDataId', param).then((res) => {
            console.log(res)
            if (res.code == "200") {
              i.assignee_dictText = res.result.assignee_dictText
              i.nodeName = res.result.nodeName
            }
            //在循环结束后返回结果
            if(index==data.length-1){
              resolve(data)
            }
          })
        })
      })
    },

4、缺少npm环境
在这里插入图片描述
5、
网页弹窗 会在当前浏览器窗口弹出一个新的浏览器窗口(iframe跨域问题不能直接访问某些链接比如百度)

    showModal(location) {
      var wid = 800;
      var hgt = 600;
      var href = api.InforSystem;
      var x = (screen.width - wid) / 2;
      var y = (screen.height - 20 - hgt) / 2;
      var winstyle = 'width=' + wid + ',height=' + hgt + ',left=' + x + ',top=' + y + ',status=no,menubar=no,scrollbars=yes,toolbar=no,resizable=yes';
      lastopenwin = window.open(href + location, '_blank', winstyle, true);
      lastopenwin.focus();
    },

6、import {***} from和 import ** from (带不带大括号的问题)

//1
import { commonMixin } from 
export const commonMixin = {}
//2
import  ReimburseBpmMixin  from 
const ReimburseBpmMixin = {
	data() {
		return {
		}
	},
	methods: {
	}
}
export default ReimburseBpmMixin;

7、uniapp获取不到路由参数时(当然有可能是这个项目有问题)
window.location.href
路由参数乱码时

//如果data是一个对象就JSON.stringify
url: '/pages/12323243?item='+encodeURIComponent(JSON.stringify(data))
let url=window.location.href
let index=url.indexOf("=")
let urldata= url.substring(index+1,url.leng)

8、遍历Object属性
https://segmentfault.com/a/1190000041977281
遍历两个数组寻找一个对象中的key与另一个对象中value匹配的值
在这里插入图片描述

data.map((obj) => {
  Object.keys(obj).forEach(akey => {
    this.columns.map((i) => {
      Object.keys(i).forEach(item => {
        //如果column的align的值==obj里的key 就把 column里的title汉字 在obj里存为汉字
        if (item == 'dataIndex') {
          if (i[item] == akey) {
            debugger
            console.log(i[item] + "------" + akey + "---------" + i.title)
            //wkflwID------wkflwID---------流程定义号
            let key = akey
            let value = i.title 
            this.translate[key] = value
          }
        }
      })
    })
  })
})
//v-for遍历数据要使用translate对象中的key遍历时要写item[xxx] 而不是 item.xxx
  <view class="cu-item"
        v-for="(item,index) in tableData"
        :key="index">
    <view class="content"
          style="left: 24px;">
      <view class="text-grey">
        <span v-for="(a,b) in translate"
              :key="b"
              style="font-size: 13px;">{{a}}{{item[b]}}</span>
      </view>
    </view>
  </view>

9、动态设置style的值

 :style="{'height':`${cardeleH}px`,}"

10、uniapp跳转页面传参
https://www.jianshu.com/p/0f4959df7abb
在这里插入图片描述
11、子组件input通过v-model传值
https://www.jianshu.com/p/854fc40cf0b4
当父组件调用子组件包含的input输入框时 需要将子组件input输入框的值绑定给父组件的v-model 不再需要用$emit向父组件传值

//父组件
  <view class="cu-form-group ">
    <view class="title"><text class="text-red">*</text><text space="ensp">报销科目:</text></view>
    <OnlineSelectTree 
            v-model="model.subject"
            name="input" />
  </view>
//子组件
   <input v-model="selected"
           placeholder="请选择"
           readonly
           disabled="true" />
    <Zpopup :value="openPop"
            @change="onChange"
            :type="'bottom'">
      <view class="pop-box">
        <view class="pop-title">
        </view>
        <view style="overflow: scroll;"
              class="popup_content">
          <LyTree ref="xyTree"
                  :treeData="treeData"
                  @cnecked="treeChecked"></LyTree>
        </view>
      </view>
    </Zpopup>
  methods:{//给子组件的input赋值时给父组件传值
      treeChecked (data) {
      this.selected=data.name
      // this.$emit('treeChecked',data)
       this.$emit('input', this.selected);
      // #ifndef MP-WEIXIN
      this.$emit('change', this.selected);
      // #endif
    },
  },
  model: {//与methods同级
    prop: 'value',
    event: 'input'
  }

12、cascader级联的问题 tree应该也会有同样的问题:children.filter not a function 和 options not array数据不是数组形式就装不进去
13、uniapp的form表单可以验证表单规则
https://uniapp.dcloud.net.cn/component/uniui/uni-forms.html

 <uni-forms ref="form"
                 :model="model"
                 :rules="rules"
                 validate-trigger="bind"
                 err-show-type="undertext">
        <uni-forms-item name="proposer"
                        label="申请人"
                        :required="">
        //不写require就没有必填的星号 rules里写true也不行
          <input v-model="model.proposer"
                 placeholder="请输入"
                 name="proposer" />
        </uni-forms-item>
  </uni-forms>
   rules: {
        age: {
          rules: [{
            required: true,
            errorMessage: '请输入年龄'
          },
          {
            format: 'number',
            errorMessage: '年龄只能输入数字'
          },
          {
            minimum: 1,
            maximum: 200,
            errorMessage: '年龄范围{minimum}~{maximum}'
          },
          ]
        },
      },

14、uniapp给上级页面传递信息 除了$emit之外

//子页面
survyData(data){
      let pages = getCurrentPages()
      let prevPage = pages[pages.length - 2]
      prevPage.$vm.getValue(data, 'survy')
      this.close();
},
//父页面
getValue (data, type) {}

15、在循环结束后根据循环的结果进行处理 async await promise

  async submit () {
      let status = await this.checkTable()
      this.$refs['form'].validate()
        .then(result => {
          console.log("验证通过", result);
          if (status == true) {
            this.submitForm()
          }
        })
        .catch(errors => {
          this.$tip.toast('信息未填写完整,请检查!');
          console.log("验证不通过=>", errors);
          return
        })
    },
    checkTable () {
      return new Promise((resolve, reject) => {
        this.$store.state.operateList.map((i) => {
          if (i.subject == undefined || i.subject == null) {
            this.$tip.toast('报销明细(票夹信息)信息未填写完整,请编辑!');
            resolve(false)
            return
          }
        })
        resolve(true)
      })
    },

另一种 文件上传时

  // 获取上传状态
    async select (res) {
      console.log(this.attachment)
      console.log('选择文件:', res)
      await this.uploadFile(res.tempFilePaths[0]);
    },
    uploadFile (tempFilePaths) {}

16、uniapp返回上一级是重载上一级的表单
如果不是foot页 可以使用

let pages = getCurrentPages();
let prevPage = pages[ pages.length - 2 ];//上一页
console.log("prevPage===>",prevPage)
prevPage.$vm.downCallback()//调用上一页的方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/190964.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

dataworks插入,分组,排序,关联语句

– 向表中插入数据 – insert into/overwrite table 表名 values (…),(…),…; – insert into/overwrite table 表名 select …; – 创建样例表 create table if not exists temp_test_xsxx_30( xh string comment ‘学号’, xm string comment ‘姓名’, xb string comment…

C++初阶--map和set

目录 关联式容器 set set的模板参数列表 set的构造 set的使用 multiset map map的模板参数 map的构造 map的容量与元素访问 map的使用 multimap 底层结构 AVL树 节点的定义 实现 图解 红黑树 性质 节点的定义 实现 图解​ 红黑树模拟实现STL中的map和set MyMap.h MySet.…

windows系统使用Freeglut+glew库编写opengl程序(Mingw)

Freeglut glut是opengl实用工具集,由Mark Kilgrad所写。可以用来显示窗体,管理用户输入,字体,图像等操作,现在已经停止维护了,它的3.7版本是苹果电脑操作系统Mac OS 10.8(又名“美洲狮”)的opengl实用工具库的框架基础 使用更新的Freeglut替代glut,Freeglut是由Pawel…

论Unity_InputSystem如何使用(一)

一、导入 在Window——PackageManage中搜索InputSystem&#xff0c;下载导入。如果搜不到&#xff0c;则调整为UnityRegistry。 二、更改输入模式 Edit——ProjectSettings——Player——OtherSettings——Configuration——Active Input Handling&#xff0c;选择旧版或者新…

【虚拟现实】密西根大学 AR/VR/MR/XR 课程笔记

AR/VR/MR/XRModule 1 of 4: XR Terminology & ApplicationsVR and ARMixed RealityXRXR technology landscapeModule 1 of 4: XR Terminology & Applications 本模块将建立围绕 XR 的不同概念&#xff0c;并提供相关技术的简要概述。 了解 AR、VR 和 MR 的潜力和局限性…

RPA自动化办公05——Uibot自动抓取网页数据

参考&#xff1a;数据获取和处理_UiBot开发者指南 Python爬虫要对网页文件结构有一定了解&#xff0c;而且写程序一点一点把数据弄出来也很麻烦。 但是Uibot爬取数据是很简单的。 全部流程不过几步&#xff0c;本次爬取某东手机商品的信息&#xff1a; 电商数据爬取 网页长…

VR视频加密SDK方案一机一码

VR视频比传统的平面视频给用户带来更好的体验&#xff0c;而且现在在教育、娱乐等领域VR类视频也越来越多。相比传统的视频制作&#xff0c;VR视频的成本要更高&#xff0c;所以重视VR视频的版权保护提升安全性&#xff0c;是很多VR内容制作商不得不考虑的问题。那么VR视频加密…

【Scipy】菲涅尔积分和羊角螺线

文章目录菲涅尔积分简介复数域的菲涅尔积分羊角螺线菲涅尔积分简介 菲涅尔积分一般被写为S(x)S(x)S(x)和C(x)C(x)C(x)&#xff0c;定义为 S(x)∫0xsin⁡(t2)dt∑n0∞(−1)nx4n3(2n1)!(4n3)C(x)∫0xcos⁡(t2)dt∑n0∞(−1)nx4n1(2n)!(4n1)S(x)\int^x_0\sin(t^2)\text dt\sum^\i…

SpringBoot中如何优雅的使用多线程

本文带你快速了解Async注解的用法&#xff0c;包括异步方法无返回值、有返回值&#xff0c;最后总结了Async注解失效的几个坑。 在 SpringBoot 应用中&#xff0c;经常会遇到在一个接口中&#xff0c;同时做事情1&#xff0c;事情2&#xff0c;事情3&#xff0c;如果同步执行的…

【翻译】为深度学习购买哪种GPU: 我在深度学习中使用GPU的经验和建议

文章目录概述GPU是如何工作的&#xff1f;对深度学习处理速度最重要的GPU规格张量核心没有张量核心的矩阵乘法使用张量核心的矩阵乘法带有张量核心和异步拷贝的矩阵乘法&#xff08;RTX 30/RTX 40&#xff09;和TMA&#xff08;H100&#xff09;内存带宽二级缓存/共享内存/一级…

服务器遭受cc攻击的处置策略

如果服务器遭到了CC攻击&#xff0c;你可以采取以下措施来解决问题&#xff1a;使用防火墙和安全组进行限制&#xff1a;限制服务器的流量以防止进一步的攻击。升级服务器资源&#xff1a;为了应对更高的流量&#xff0c;可以升级服务器的内存&#xff0c;处理器等资源。安装防…

字节跳动青训营--前端day5

文章目录前言一、初识HTTP拓展—输入地址到页面渲染发生了哪些事情二、协议分析1.发展2.报文2.1 请求报文&#xff1a;请求行&#xff1a;请求头主体2.2 响应报文&#xff1a;状态行响应头响应正文2.3缓存3.发展3.1 Http23.2 Https前言 仅以此文章记录学习历程 一、初识HTTP …

kubernetes核心概念 Service

kubernetes核心概念 Servicekubernetes核心概念 Service一、 service作用二、kube-proxy三种代理模式2.1 UserSpace模式2.2 iptables模式2.3 ipvs模式2.4 iptables与ipvs对比三、 service类型3.1 service类型3.2 Service参数四、 Service创建4.1 ClusterIP类型4.1.1 普通Cluste…

1月安全月报 | 2亿Twitter用户数据被公开;美计划发起“黑掉五角大楼3.0”漏洞赏金计划

目录 国外安全热点 &#x1f449;安全政策 &#x1f449;数据安全 &#x1f449;市场趋势 &#x1f449;勒索事件 国内安全热点 &#x1f449;数据安全 &#x1f449;业务安全 &#x1f449;移动安全 &#x1f449;网安政策 为了让大家更全面的了解网络安全的风险&am…

精读JavaScript中的代理(Proxy)与反射(Reflect)

目录 定义与概念 属性及函数 Proxy Reflect 使用场景 如何实现 实现过程 运行效果 应用限制及优点 写在最后 定义与概念 JavaScript中的Proxy与Reflect是ES6中引入的新特性&#xff0c;它们可以帮助我们更高效地控制对象。 代理&#xff08;Proxy&#xff09;是一种…

元宇宙哪些吓死人的概念话题

元宇宙哪些吓死人的概念话题 深层的奥秘&#xff1a;人是符号及符号的意义驱动的 趣讲大白话&#xff1a;现有概念再有东西 ************** **元宇宙与跨学科 2.1 元宇宙与交叉学科 2.2 元宇宙与哲学 2.3 元宇宙与文学 2.4 元宇宙与艺术学 2.5 元宇宙与电影学 2.6 元宇宙与传播…

【面向对象】构造函数与析构函数详解

构造函数与析构函数详解 文章目录构造函数类型参考博客&#x1f60a;点此到文末惊喜↩︎ 构造函数 类型 默认构造函数&#xff08;缺省构造函数&#xff09; 一个类中只能出现一个默认构造函数在调用时&#xff0c;不需要传入实参。因为默认构造函数通常是无参的或所有形参都…

射频信号探测器制作

射频信号探测器制作一、元件要求二、芯片参数三、原理剖析四、实验思路五、实物展示、使用六、个人总结一、元件要求 CD4001&#xff0c;是四2输入或非门。或非门的逻辑关系特点是只有当输入端全部为低电平时&#xff0c;输出端为高电平状态&#xff1b;在其余输入情况下&…

TCP-IP协议基础知识

1、简介 tcp/ip&#xff1a;通信协议的统称&#xff0c;是IP,ICMP,TCP,UDP,HTTP,TELNET,SNMP,SMTP等协议的集合 TCP/IP和OSI的关系 OSI属于ISO&#xff08;国际化标准组织&#xff09;制定的通信系统标准&#xff0c;但是并没有普及&#xff1b;TCP/IP是非ISO制定的某种国际…

详谈ORB-SLAM2的局部建图线程LocalMapping

ORB-SLAM2的局部建图线程LocalMapping分为5个步骤&#xff0c;非常简单。当得到缓冲队列里的关键帧&#xff0c;第一步处理当前关键帧的地图点关系等&#xff1b;第二步判断地图点是否为新创建&#xff0c;如果是那就进入测试&#xff0c;测试地图点的好坏&#xff0c;如果不好…