如何使用promise改写我的代码?

新手,大佬轻点喷,vue2项目,搜索框用的原生,请求数据用的axios
我在项目中写了一个搜索框,目前数据的静态的,我想动态获取数据,但数据是异步请求获取的,如果我像下面直接这样赋值会获取不到值,我想使用promise改写,请问以下应当如何改写如何使用promise改写我的代码?

代码:

<template>

<div class="serUser">

<!-- 将用户数据动态渲染出来-->

<h1>欢迎进入用户管理界面</h1>

<!-- 搜索框 -->

<div id="container">

<div class="sea-container">

<form action="">

<input type="text" name="search" class="blue-input" >

<input type="submit" value="搜索" class="blue-button">

</form>

<p id="selectedId"></p>

</div>

</div>

<!-- -->

<ul v-for="(data,index) of userData" :key="index">

<li>第{{index+1}}位用户的ID为:{{data.username}}</li>

<li>第{{index+1}}位用户的密码为:{{data.password}}</li>

<li>

<button @click="changeUser()">编辑</button>

<button @click="deleteUser(index)">删除</button>

</li>

</ul>

</div>

</template>

<script type="text/ecmascript-6">

import axios from "axios";

export default {

data(){

return{

userData:[]

}

},

methods:{

changeUser(){

alert("修改我没写哦,但是可以删除")

},

deleteUser(index){

const flag = this.areYouSureDelete()

if(flag){

this.userData.splice(index, 1)

const deleteUser = this.userData

axios.get("http://192.168.198.1/admin/deleteUser",{

params:{

deleteUser:deleteUser

}

}).then(res=>{},error=>{console.log("请求失败", error)})

}

},

areYouSureDelete(){

return confirm("确定删除吗!");

},

//传入this.userData返回此数据用的所有username

initUserData(data){

if(!(data instanceof Array)){

return

}

let newData = []

for (let i = 0; i < data.length; i++) {

newData.push(data[i].username)

}

return newData

}

},

mounted() {

axios.get("http://192.168.198.1/admin/userShow")

.then(res=>{

this.userData = res.data.data

// console.log("请求成功", this.userData[0].password)

},error=>{

console.log("请求失败", error)

})

let arr = ["user","userNo1","userNo25","userNo99","userNo123","userNo1","abcd","asgh","asdasd","fsaas","ssda","admin","userZhangSan"];

// let arr = this.userData

// console.log(arr)

let search = document.getElementsByClassName("blue-input")[0];

let selectedId = document.getElementById("selectedId")

function showList(){

let res = searchByIndexOf(search.value,arr);

console.log(res)

for(let i=0;i<res.length;i++){

let li = document.createElement("li");

li.innerHTML = res[i];

document.getElementById("drop").appendChild(li);

}

}

search.oninput = function getMoreContents() {

// 添加删除ul

let drop = document.getElementById("drop");

selectedId.removeChild(drop);

let originalUl = document.createElement("ul");

originalUl.id = "drop";

selectedId.appendChild(originalUl);

showList();

}

search.onfocus = function(){

let originalUl = document.createElement("ul");

originalUl.id = "drop";

selectedId.appendChild(originalUl);

showList();

}

search.onblur = function(){

let drop = document.getElementById("drop");

selectedId.removeChild(drop);

}

//模糊查询

function searchByIndexOf(keyWord, list){

if(!(list instanceof Array)){

return ;

}

if(keyWord == ""){

return [];

}else{

let len = list.length;

let arr = [];

for(let i=0;i<len;i++){

//如果字符串中不包含目标字符会返回-1

if(list[i].indexOf(keyWord)>=0){

arr.push(list[i]);

}

}

return arr;

}

}

}

}

</script>

<style scoped>

h1{

font-size: 28px;

text-align: center;

padding-top: 40px;

}

ul{

padding: 60px 0 0 30%;

}

ul li {

padding-bottom: 12px;

}

#container {

width: 800px;

height: 150px;

margin: 0 auto 150px;

padding-top: 30px;

box-sizing: border-box;

}

/*搜索栏*/

.sea-container {

width: 450px;

height: 30px;

background-color: green;

margin: 50px auto 150px;

border: 1px solid #317EF3;

/*padding-bottom: 150px;*/

}

.blue-input {

float: left;

width: 350px;

height: 30px;

padding: 0 10px;

box-sizing: border-box;

}

.blue-button {

width: 100px;

height: 30px;

background-color: #317EF3;

color: white;

font-size: 15px;

}

/* 搜索下拉框*/

ul#drop {

list-style: none;

margin: 0;

padding: 0;

}

ul#drop li {

margin: 0;

padding: 10px;

}

ul#drop li:hover {

background-color: darkgrey;

width:200px;

}

p#selectedId {

display: inline-block;

}

</style>

后台的json数据

{"admin":[{"username":"admin","password":"123456"}],

"users": [

{

"username": "user",

"password": "123456"

},

{

"username": "userNo1",

"password": "123456"

},

{

"username": "userNo99",

"password": "123456"

},

{

"username": "userZhangSan",

"password": "123456"

},

{

"username": "userLisi",

"password": "123456"

},

{

"username": "AASD",

"password": "SSDA"

}

]}


回答:

2023 年了,用 async/await 吧,在异步操作前加一个 await,再把自己的函数前加一个 async,剩下的就跟写同步函数差不多。

async mounted() {

// 这里最好加一个错误处理,网络请求很容易出错

const data = await axios.get('....');

this.userData = data;

// 后面也不要再手动操作 dom 了,直接写成模版吧

}


回答:

1、axios的get方法返回的就是一个包装过的Promise对象
2、如果你原先的想法是想要把在then()方法里等待请求被满足后返回的值赋给arr,那大可以在get方法前先初始化arr,在then()里把res.data.data直接给arr就行了:

mounted(){

let arr = [];

axios.get(xxx).

then((res)=>{

this.userData=res.data.data;

arr = this.userData;

}).

catch(error=>console.log("请求失败",error));

}


回答:

使用 async/await

-  mounted() {

- axios.get("http://192.168.198.1/admin/userShow")

- .then(res=>{

- this.userData = res.data.data

- // console.log("请求成功", this.userData[0].password)

- },error=>{

- console.log("请求失败", error)

- })

+ async mounted() {

+ arr = await axios.get("http://192.168.198.1/admin/userShow")

+ .then(res=>{

+ return res.data.data

+ })

- let arr = ["user","userNo1","userNo25","userNo99","userNo123","userNo1","abcd","asgh","asdasd","fsaas","ssda","admin","userZhangSan"];


回答:

方法1、对于promise异步回调,搜索框的设置可以直接写在回调里面

axios.get("http://192.168.198.1/admin/userShow")

.then(res=>{

this.userData = res.data.data

let arr = ["user","userNo1","userNo25","userNo99","userNo123","userNo1","abcd","asgh","asdasd","fsaas","ssda","admin","userZhangSan"];

// ... 其他代码:搜索框的设置等

},error=>{

console.log("请求失败", error)

})

方法2、使用async/await组合

async mounted() {

try {

// 通过await实现异步调用api接口

const res = await axios.get("http://192.168.198.1/admin/userShow")

this.userData = res.data.data;

let arr = ["user","userNo1","userNo25","userNo99","userNo123","userNo1","abcd","asgh","asdasd","fsaas","ssda","admin","userZhangSan"];

// ... 其他代码:搜索框的设置等

} catch (error) {

console.error("Failed to fetch or process data:", error);

}

}

望采纳哈O(∩_∩)O

以上是 如何使用promise改写我的代码? 的全部内容, 来源链接: utcz.com/p/935030.html

回到顶部