js的sync调用:没有使用async await时异步调用的坑

js的sync调用:没有使用async await时异步调用的坑,看代码:

//----------------------------
//错误示例:
//doSomething()因为某些原因无法使用async
var globalData = 'abc' 
  onShow(){
	this.doSomething()
  },
  doSomething() {
    this.saveData()
    globalData = '123'
    setTimeout(() => {
      //延时模拟执行
      console.log('globalData:', wx.getStorageSync('globalData')) //获取到的数据为123,错误
    }, 2000)
 
  },
  async saveData() {
    setTimeout(() => {
      //延时模拟执行
      wx.setStorageSync('globalData', globalData) //
    }, 1000)
  },

如何避坑?继续看代码:

//----------------------------
//正确示例:
var globalData = 'abc' 
var globalDataOld
  doSomething() {
    globalDataOld = this.copyObj(globalData) //深度复制
    this.saveData()
    globalData = '123'
    setTimeout(() => {
      //延时模拟执行
      console.log('globalData:', wx.getStorageSync('globalData')) //获取到的数据为abc,正确
    }, 2000)
 
  },
  async saveData() {
    setTimeout(() => {
      //延时模拟执行
      wx.setStorageSync('globalData', globalDataOld) //使用复制的原有数据,与新数据无关
    }, 1000)
  },
  copyObj(obj){
    return JSON.parse(JSON.stringify(obj))
  },

(全文完)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在 Django 使用 async/await 可以方便地处理异步操作。然而,需要注意的是 Django 本身不支持原生的异步操作,但可以通过结合使用异步的第三方库来实现。 以下是一种常见的使用 async/await方法: 1. 安装异步支持库:首先,你需要安装异步支持库,比如 `asgiref` 和 `djangorestframework-async`。 ``` pip install asgiref djangorestframework-async ``` 2. 在视图函数使用 async/await:在视图函数,可以使用 `async` 关键字定义异步函数,并在需要的地方使用 `await` 关键字等待异步操作完成。 ```python from rest_framework.decorators import api_view from rest_framework.response import Response from asgiref.sync import async_to_sync # 使用 async/await 定义异步视图函数 @api_view(['GET']) async def my_async_view(request): # 模拟一个异步操作,比如调用外部 API response = await async_to_sync(requests.get)('https://api.example.com/data') # 处理异步操作的结果 data = response.json() return Response(data) ``` 在上面的示例,`my_async_view` 是一个使用 async/await 的异步视图函数。在视图函数,我们使用 `await` 等待异步操作 `requests.get()` 完成,并将结果赋给 `response`。然后,我们可以继续处理异步操作的结果。 3. 使用 djangorestframework-async 扩展库:如果想要更方便地在 Django 使用 async/await,可以使用第三方库 `djangorestframework-async`。它提供了一些装饰器和间件,可以在 Django Rest Framework 支持异步视图函数。 ```python from rest_framework.decorators import api_view from rest_framework.response import Response from djangorestframework_async.decorators import async_api_view # 使用 @async_api_view 装饰器定义异步视图函数 @async_api_view(['GET']) async def my_async_view(request): # 异步操作... return Response(data) ``` 通过使用 `@async_api_view` 装饰器,你可以将视图函数标记为异步函数,不再需要手动使用 `async_to_sync` 等工具。 需要注意的是,在 Django 使用异步操作需要考虑到数据库的支持情况,因为大部分的数据库驱动程序不支持异步操作。因此,在涉及到数据库的操作,可能需要使用同步方式或者结合异步库的数据库驱动程序。 希望以上解答对你有帮助!如果还有其他问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ycjnx

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

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

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

打赏作者

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

抵扣说明:

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

余额充值