小程序接口的promise化的实现方法
最近在写微信小程序,为了能用上async/await方法,需要把微信提供的异步操作包装成Promise对象,为此写了一个简单的promise(fie)函数:
/** *@functionpromise-将wx接口promise化 * *@param{String|Function}wxApi-需要转换的接口/接口名 *@param{Object|Any}[originParam={}]-原接口要求的参数对象 *@param{Object|Any}[extra]-接口要求的其他参数 */ functionpromise(wxApi,originParam={},extra){ constapi=wxApiinstanceofFunction? wxApi: wx[wxApi]; returnnewPromise((done,fail)=> api(Object.assign( originParam, { success:done, failed:fail } ), extra) ); }
正当我沾沾自喜、兴致冲冲地调用拍照接口测试时,控制台扔给我一个“this._invokeMethodisnotaFunction”的错误。显而易见,由于wxApi被当做参数传递,执行时的this与预期不一致,因此需要显式指定上下文,遂把函数再改改:
/** *@functionpromise-将wx接口promise化 * *@param{String|Function}wxApi-需要转换的接口/接口名 *@param{Object|Any}[originParam={}]-原接口要求的参数对象 *@param{Object|Any}[context=wx]-执行上下文 *@param{Object|Any}[extra]-接口要求的其他参数 */ functionpromise(wxApi,originParam={},context=wx,extra){ constapi=wxApiinstanceofFunction? wxApi: context[wxApi]; returnnewPromise((done,fail)=> api.call(context,Object.assign( originParam, { success:done, failed:fail } ), extra) ); }
由于大部分接口都是wx的方法,因此这个promise方法在大多数情况下还是比较省事的。不过拍照接口是cameraContext的方法,所以传递的是createCameraContext方法的返回值:
/** *@functiontakePhoto-promise风格的拍照接口 * *@param{Object|Any}[options={}]-相机配置 * *@return{Promise} */ exportfunctiontakePhoto(options={}){ consttempOptions={ quality:'high', ...options } constcameraContext=createCameraContext(); returnpromise(cameraContext.takePhoto,tempOptions,cameraContext); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。