Uniapp-远离回调callback请使用await、async

今天要实现一个功能,在搜索完课程及句子之后判断是否有结果,因为需要对课程和句子的结果统一判断,所以要使用async, await来将两种搜索的异步方法可以顺序调用。

如何使用async, await

来看下如何得到课程:

searchLessonsFromServer() {
    if (this.no_more_lessons) {
        return
    }
    let self = this
    let page = self.searchMeResult.pth_lessons.page //
    let per_page = 10 //每页5个记录
    let toServerUrl =    `${this.$backHost}/api/v1/users/${this.$user.id}/lessons/search_me/${self.latestSearchValue}/${per_page}/${page}`
    return new Promise((resolve, reject) => {
        this.$request({
            url: toServerUrl,
            success: ((res) => {
                console.log('lessons#searchLessonsFromServer in Promise():', res);
                if (res.pth_lessons.length != 0) {
                    self.searchMeResult.pth_lessons.data = [...self.searchMeResult
                        .pth_lessons.data,
                        ...res.pth_lessons
                    ]
                } else {
                    self.no_more_lessons = true
                }
                resolve(res)
            })
        });
    })
},

异步方法最后返回一个Promise,这样就可以在其它函数中将其用同步的办法来调用searchLessonsFromServer函数。

这里实现的课程搜索是有翻页功能的,得到服务器返回的数据res之后,用三点扩展符将其添加到前端的数据中,

self.searchMeResult.pth_lessons.data = [
						...self.searchMeResult.pth_lessons.data,
                        ...res.pth_lessons
                    ]

搜索句子也是类似的将异步方法放到new Promise之中, 然后在其它函数中这样调用:

//服务器搜索课程名称
async search_me() {
	...
 	await this.searchLessonsFromServer()
    await this.searchSentencesFromServer()
    if (!this.haveSearchResult()) {
        let errMsg = "搜索不到:" + this.latestSearchValue
        uni.showModal({
            title: '提示',
            content: errMsg,
            showCancel: false,
        });
        this.search_focus = true
        return
    } else {
        this.searchValue = this.latestSearchValue
    }
}
                

即在调用函数search_me前面加上async, 使用异步方法时,前面加上await即可!这样,后续的haveSearchResult就肯定是在前面两个异步的搜索函数完成之后才会执行!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QzDYdHGz-1646640234157)(https://dw.gsenglish.cn:5543/uploads/2022/03/clipboard-202203011734-0lebb.png)]

async和await:让异步编程更简单

更多async,await 相关知识可以参考:https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Asynchronous/Async_await

我是@爱玩的安哥,关注我获取更多有用知识

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
在uniapp中,回调函数的使用方式与其他JavaScript框架或库类似。下面是一些常见的在uniapp中使用回调函数的方法: 1. 作为参数传递:你可以将回调函数作为参数传递给其他函数。当某个事件或异步操作完成时,调用回调函数来处理结果。例如: ```javascript function fetchData(callback) { // 模拟异步求数据 setTimeout(() => { const data = { name: 'John', age: 25 }; callback(data); // 调用回调函数并传递数据 }, 1000); } fetchData((data) => { console.log(data); // 在回调函数中处理数据 }); ``` 2. 在组件中使用:在uniapp的组件中,你可以定义一个方法作为回调函数,并在需要的地方进行调用。例如: ```javascript export default { methods: { handleCallback(data) { console.log(data); // 在回调函数中处理数据 }, fetchData() { // 模拟异步求数据 setTimeout(() => { const data = { name: 'John', age: 25 }; this.handleCallback(data); // 调用回调函数并传递数据 }, 1000); }, }, }; ``` 3. 使用Promise对象:你也可以使用Promise对象来处理回调函数。在uniapp中,很多异步操作返回的是Promise对象。你可以使用`.then()`方法来处理异步操作完成后的结果。例如: ```javascript function fetchData() { return new Promise((resolve, reject) => { // 模拟异步求数据 setTimeout(() => { const data = { name: 'John', age: 25 }; resolve(data); // 异步操作完成,将数据作为参数传递给resolve方法 }, 1000); }); } fetchData().then((data) => { console.log(data); // 在回调函数中处理数据 }); ``` 以上是在uniapp中使用回调函数的一些常见方法。你可以根据具体的场景选择合适的方式来使用回调函数。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱玩的安哥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值