『uni-app』处理返回结果为 Promise 的解决方法

1.问题介绍

我们在uniapp中调用方法时,经常返回结果类型对象是promise

处理方式:如果某个函数调用的结果打印后返回的是promise,就马上用saync和await进行优化,async放到方法名称的前面,await放到方法里面

示例:

home.vue(main.js中已配置@escook/request-miniprogram网络请求包)

<template>
  <view>
    首页
  </view>
</template>

<script>
  export default {
    data() {
      return {
      };
    },
    onLoad() {
      // this.getOrder()
      this.getOrder()
    },
    methods:{
      getOrder(){
        const res=uni.$http.get(){"url"}
        console.log(res)
      }
    }
  }
</script>

<style lang="scss">

</style>

可以看到没有用async时返回的是一个promise对象

添加async和await后

    methods:{
      async getOrder(){
        const res=await uni.$http.get("/api/public/v1/home/catitems")
        console.log(res)
      }
    }

结果:

2.对promise的理解

  • 由于ajax异步方式请求数据时,我们不能知道数据具体回来的事件,所以过去只能将一个callback函数传递给ajax封装的方法,当ajax异步请求完成时,执行callback函数。
  • promise对象接受resolve和reject两个参数,当一个异步动作发生时,promise对象会通过resolve完成对动作成功进行解析,reject会捕获这个动作的异常。一个promise对象,通过new Promise().then()执行下一步骤操作。
  • axios is a promise based HTTP client for the browser and node.js。也就是说,使用axios发出请求,难免涉及promise

Promise构造函数的参数是一个函数,函数里面的代码是异步的,即Promise里面的操作,和Promise()外面的操作时异步"同时"进行的。此外,只要在函数前面加上async 关键字,也可以指明函数是异步的。

async关键字实际是通过Promise实现,如果async 函数中有返回一个值 ,当调用该函数时,内部会调用Promise.solve() 方法把它转化成一个promise 对象作为返回,但如果timeout 函数内部抛出错误,那么就会调用Promise.reject() 返回一个promise 对象。若某函数调用一个异步函数(比如内部含有primise),该函数应用async修饰。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Uni-request是一个基于Promise的网络请求库,适用于uni-app和小程序开发。如果想在uni-app中使用uni-request,需要先进行以下步骤: 1. 在HBuilderX中创建一个uni-app项目 2. 打开命令行工具,使用npm命令安装uni-request: ``` npm install uni-request ``` 3. 在需要发送网络请求的页面或组件中引入uni-request: ``` import request from '@/common/request.js' ``` 4. 在request.js文件中编写自己的请求方法,例如: ``` import { BASE_URL } from './config.js' import Request from 'uni-request' const request = new Request() request.interceptors.request.use(config => { config.baseUrl = BASE_URL return config }) export default request ``` 在这个示例中,我们将BASE_URL定义在config.js文件中,并通过拦截器将其添加到请求的baseUrl中。这样,我们就可以在发送请求时直接使用相对路径,而不需要每次都写全路径。 5. 在页面或组件中使用request发送网络请求,例如: ``` import request from '@/common/request.js' request.get('/api/user/info').then(res => { console.log(res.data) }) ``` 在这个示例中,我们通过request发送了一个GET请求,请求地址为"/api/user/info"。请求成功后,我们打印出了返回的数据。 注意:在使用uni-request发送网络请求时,需要在manifest.json文件中配置网络权限。可以在manifest.json文件中的"app-plus"-"permissions"节点中添加以下权限: ``` "app-plus": { "permissions": { "network": { "description": "用于发送网络请求" } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白木Channel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值