最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

小程序接口的promise化的實(shí)現(xiàn)方法

 更新時(shí)間:2019年12月11日 08:26:58   作者:madRain  
這篇文章主要介紹了小程序接口的promise化的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

最近在寫(xiě)微信小程序,為了能用上 async/await 方法,需要把微信提供的異步操作包裝成 Promise 對(duì)象,為此寫(xiě)了一個(gè)簡(jiǎn)單的 promise(fie) 函數(shù):

/**
 * @function promise - 將 wx 接口 promise 化
 * 
 * @param { String|Function } wxApi - 需要轉(zhuǎn)換的接口/接口名
 * @param { Object|Any } [originParam = {}] - 原接口要求的參數(shù)對(duì)象
 * @param { Object|Any } [extra] - 接口要求的其他參數(shù)
 */
function promise(wxApi, originParam = {}, extra){
 const api = wxApi instanceof Function?
  wxApi:
  wx[wxApi];

 return new Promise((done, fail) =>
  api(Object.assign(
   originParam,
   {
    success: done,
    failed: fail
   }
  ),
  extra)
 );
}

正當(dāng)我沾沾自喜、興致沖沖地調(diào)用拍照接口測(cè)試時(shí),控制臺(tái)扔給我一個(gè) “this._invokeMethod is not a Function” 的錯(cuò)誤。顯而易見(jiàn),由于 wxApi 被當(dāng)做參數(shù)傳遞,執(zhí)行時(shí)的 this 與預(yù)期不一致,因此需要顯式指定上下文,遂把函數(shù)再改改:

/**
 * @function promise - 將 wx 接口 promise 化
 * 
 * @param { String|Function } wxApi - 需要轉(zhuǎn)換的接口/接口名
 * @param { Object|Any } [originParam = {}] - 原接口要求的參數(shù)對(duì)象
 * @param { Object|Any } [context = wx] - 執(zhí)行上下文
 * @param { Object|Any } [extra] - 接口要求的其他參數(shù)
 */
function promise(wxApi, originParam = {}, context = wx, extra){
 const api = wxApi instanceof Function?
  wxApi:
  context[wxApi];

 return new Promise((done, fail) =>
  api.call(context, Object.assign(
   originParam,
   {
    success: done,
    failed: fail
   }
  ),
  extra)
 );
}

由于大部分接口都是 wx 的方法,因此這個(gè) promise 方法在大多數(shù)情況下還是比較省事的。不過(guò)拍照接口是 cameraContext 的方法,所以傳遞的是 createCameraContext 方法的返回值:

/**
 * @function takePhoto - promise風(fēng)格的拍照接口
 * 
 * @param { Object|Any } [options = {}] - 相機(jī)配置
 * 
 * @return {Promise}
 */
export function takePhoto(options = {}){
  const tempOptions = {
    quality: 'high',
    ...options
  }

 const cameraContext = createCameraContext();

 return promise(cameraContext.takePhoto, tempOptions, cameraContext);
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

永城市| 莫力| 通渭县| 普定县| 金华市| 晴隆县| 临江市| 郁南县| 额尔古纳市| 辽源市| 易门县| 闽清县| 当涂县| 双流县| 河西区| 许昌县| 抚顺市| 南乐县| 芮城县| 天等县| 苍溪县| 施甸县| 景德镇市| 德令哈市| 依兰县| 化德县| 报价| 合江县| 英吉沙县| 潢川县| 镇巴县| 丘北县| 息烽县| 望江县| 丰都县| 崇仁县| 仁布县| 婺源县| 饶阳县| 卢湾区| 瑞金市|