Promise 异步转同步 .then()

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_39425864/article/details/85139119

创建一个api.js

export const login= function() {
  return new Promise(function (resolve, reject) {
    wx.login({
      success: function (res) {
        resolve(res)
      }, fail: function (res) {
        reject(res)
      }
    })
  });
}
export const shop_desc = function (param) {
  return new Promise(function (resolve, reject) {
   wx.request({
     url: '',//你的接口
     data:{
       'app_id': '你的小程序id', 'cpid': param.id, 'session_key': param.code
     },success:function(res){
       resolve(res)
     },fail:function(res){
       reject(res)
     }
   })
  });
}

引入方法

import {login,shop_desc} from '../../public/api.js' //引入用到的方法



onLoad: function (options) {
    login().then(data => {
      let json_c = {
        code: data.code,
        id: '16266'
      };
      shop_desc(json_c).then(res => {
        console.log(res)
      }).catch(fail => {
        console.log(fail)
      })
    }).catch(fail => {
      console.log(fail)
    })
  },

over!!!

展开阅读全文

异步同步问题

06-18

大家好,rn 我们在wp8开发过程中遇到异步转同步问题如下:rn rn1.在C++组件中希望通过委托来调用C#层的函数实现,但是C#层的函数使用了大量的异步操作(async,await关键字),而需要设置到C++组件的委托函数不能是异步操作,所以需要将异步转同步处理,使用如下函数处理:rnrn /// rn /// 异步转同步rn /// rn /// rn public static void AsyncRun(Func func)rn rn //func为空 不执行rn if (func == null)rn rn return;rn rn Task.Run(async () =>rn rn await func.Invoke();rn ).Wait();rn rn2.由于AsyncRun方法在非UI线程中处理,如果func方法中有对UI的操作,则程序奔溃。那么又需要通过System.Windows.Deployment.Current.Dispatcher.BeginInvoke将func方法强制设置到UI线程中处理,使用如下函数处理: rnrn /// rn /// 异步转同步rn /// rn /// rn public static void AsyncRun(Func func)rn rn //func为空 不执行rn if (func == null)rn rn return;rn rn Task.Run(async () =>rn rn System.Windows.Deployment.Current.Dispatcher.BeginInvoke(async () =>rn rn if (func != null)rn rn await func.Invoke();rn rn );rn ).Wait();rn rnrn3.但是BeginInvoke执行的是异步处理,这样处理下来,又无法达到同步处理的效果,后续又做了如下改动rn /// rn /// 异步转同步rn /// rn /// rn public static void AsyncRun(Func func)rn rn //func为空 不执行rn if (func == null)rn rn return;rn rnrn EventWaitHandle Wait = new AutoResetEvent(false);rn System.Windows.Deployment.Current.Dispatcher.BeginInvoke(async () =>rn rn tryrn rn await func.Invoke();rn rn catch (System.Exception ex)rn rnrn rn Wait.Set();rn );rn // wait while func.Invoke() on UIrn Wait.WaitOne();rn rnrn在非UI线程下,运行是正常的,但在UI线程,AsyncRun方法会出现死循环(因为EventWaitHandle阻塞了UI线程)。rn rn在实际项目中,遇到情况比较复杂,可能是UI线程操作,也可能是非UI。目前不知道在UI线程下,怎么实现同步操作。rn rn附示例代码rnhttps://skydrive.live.com/redir?resid=82F5E40F919E82BF!144&authkey=!AJ1OGBJKQewVvNkrnrn附件为简单的实例代码,请问,怎么实现UI线程下的同步操作呢?或者有什么好的处理方案吗?rn rn谢谢。 论坛

没有更多推荐了,返回首页