微信小程序异步API为Promise简化异步编制程序的操作方法,NodeJS中运用Promise来封装异步函数

By admin in 4858美高梅 on 2019年5月5日

把微信小程序异步API转化为Promise。用Promise管理异步操作有多方便,什么人用什么人知道。
微信官方尚未付诸Promise
API来拍卖异步操作,而官方API异步的又相当多,那使得多异步编制程序会层层回调,代码一纵横交错,回调起来就想砸计算机。
于是写了几个通用工具,把微信官方的异步API转化为Promise,方便管理(多)异步操作。

把微信小程序异步API转化为Promise。用Promise管理异步操作有多造福,何人用何人知道。

把微信小程序异步API转化为Promise。用Promise管理异步操作有多造福,什么人用哪个人知道。微信官方未有交给Promise
API来管理异步操作,而官方API异步的又万分多,那使得多异步编制程序会层层回调,代码一错综相连,回调起来就想砸Computer。

 在写Node.js的长河中,两次三番的IO操作也许会促成“金字塔恐怖的梦”,回调函数的一体系嵌套让代码变的难以保险,利用CommonJs的Promise来封装异步函数,使用统1的链式API来解脱多种回调的梦魇。

你能够如此用:

微信官方并未有付诸Promise
API来拍卖异步操作,而官方API异步的又万分多,这使得多异步编制程序会层层回调,代码①纵横交错,回调起来就想砸Computer。

4858美高梅 1

  Node.js提供的非阻塞IO模型允许咱们采用回调函数的点子管理IO操作,可是当需求连接的IO操作时,你的回调函数会多种嵌套,代码很不雅观,而且不易维护,而且说不定会有看不完错误管理的再次代码,也便是所谓的“Pyramid
of Doom”。

预备倒车后的方法并暴揭发

于是乎写了1个通用工具,把微信官方的异步API转化为Promise,方便处理(多)异步操作。

于是写了一个通用工具,把微信官方的异步API转化为Promise,方便管理异步操作。你能够那样用:准备倒车后的格局并暴流露

复制代码 代码如下:

// /utils/wx-promise.js
import toPromise from '/module/to-promise/src/index'

const toPromiseWx = toPromsie(wx)

export const request = toPromiseWx('requset')
export const getLocation = toPromiseWx('getLocation')
export const setStorage = toPromiseWx('setStorage')

//export 其他你项目中可能用到的异步API

您能够如此用:

// /utils/wx-promise.jsimport toPromise from '/module/to-promise/src/index'const toPromiseWx = toPromsieexport const request = toPromiseWx('requset')export const getLocation = toPromiseWx('getLocation')export const setStorage = toPromiseWx('setStorage')//export 其他你项目中可能用到的异步API

step1(function (value1) {
    step2(value1, function(value2) {
        step3(value2, function(value3) {
            step4(value3, function(value4) {
                // Do something with value4
            });
        });
    });
});

在其余文件中使用
在App.js中使用:

计划倒车后的艺术并暴透露

在其余文件中央银行使在App.js中央银行使:

  那其实正是Node.js的Control
flow的标题,对于那一个标题,消除方案都游人如织,举例动用async,大概eventProxy等,可是本文的核心是运用CommonJs规范中对Promise来化解那么些难点。

//App.js
import { request } from './utils/wx-promise.js'

App({
  onLanuch: () => {
    request({ url: 'http://api.yourapi.com' })
      .then(() => {
        //成功后处理
      })
      .then(() => {
        //失败后处理
      })
  }
})
// /utils/wx-promise.js
import toPromise from '/module/to-promise/src/index'
const toPromiseWx = toPromsie(wx)
export const request = toPromiseWx('requset')
export const getLocation = toPromiseWx('getLocation')
export const setStorage = toPromiseWx('setStorage')
//export 其他你项目中可能用到的异步API
`//App.js``import { request } from` `'./utils/wx-promise.js'``App({``onLanuch: () => {``request({ url:` `'[http://api.yourapi.com](http://api.yourapi.com/)'` `})``.then => {``//成功后处理``})``.then => {``//失败后处理``})`//欢迎加入全栈开发交流圈一起学习交流:864305860`}``})`

什么是Promise?

在其他page中使用:

在其余文件中使用

在其他page中使用:

  CommonJs的Promise规范有诸四种,大家一般研讨的是Promise/A+规范,它定义了Promise的基本行为。

// /page/index.js
import { request, setStorage } from '../utils/wx-promise.js'

page({
  onLoad: () => {
    request({ url: 'http://api.yourapi.com' })
      .then(() => {
        //成功后处理
      })
      .then(() => {
        //失败后处理
      })
  },
  onHide: () => {
    setStorage({
      key: 'yourkey',
      data: 'yourvalue'
    })
      .then(() => {
        //保存成功
      })
      .then(() => {
        //保存失败
      })
  }
})

在App.js中使用:

`// /page/index.js``import { request, setStorage } from` `'../utils/wx-promise.js'``page({``onLoad: () => {``request({ url:` `'[http://api.yourapi.com](http://api.yourapi.com/)'` `})``.then => {``//成功后处理``})``.then => {``//失败后处理``})``},``onHide: () => {``setStorage({``key:` `'yourkey'``,``data:` `'yourvalue'``})``.then => {``/保存成功``})``.then => {``//保存失败``})``}`//欢迎加入全栈开发交流圈一起学习交流:864305860`})`

  Promise是二个对象,它一般代表1个在以后恐怕产生的异步操作。那几个操作只怕成功也说不定倒闭,所以三个Promise对象一般有1个情形:Pending,Fulfilled,Rejected。分别表示未到位、成功做到和操作失利。一旦Promise对象的动静从Pending变成Fulfilled可能Rejected放43个,它的气象都并未有主意再被改动。

花色地址:to-promise

//App.js
import { request } from './utils/wx-promise.js'

App({
 onLanuch: () => {
  request({ url: 'http://api.yourapi.com' })
   .then(() => {
    //成功后处理
   })
   .then(() => {
    //失败后处理
   })
 }
})

to-promise是叁个转换微信小程序异步API为Promise的3个工具库优点:防止小程序异步编制程序数次回调带来的过多回调导致逻辑不明晰,篇幅过长等主题素材。借助于Promise异步编制程序特点,协助链式操作,像一道同样写异步。转化后得API差不多和微信官方API同样。使用格局:安装使用git安装到花色根目录/module,

  三个Promise对象经常会有2个then方法,这些方法让大家得以去操作今后恐怕得逞后归来的值可能是没戏的来头。这么些then方法是那样子的:

其他愈来愈多更实际用法,直接粘贴README了,如下。

在其他page中使用:

git clone https://github.com/tornoda/to-promise或直接下载放入项目目录下如:/module在需要用到的地方引入import toPromise from '/module/to-promise/src/index'绑定微信全局对象到函数,以便可以取到微信得APIconst toPromiseWx = toPromise开始转化你需要得异步API//apiName为微信异步方法名,如对wx.request()进行转化const request = toPromiseWx('request')//直接使用request方法

promise.then(onFulfilled, onRejected)
  由此可见的是,then方法接受四个参数,它们日常是多个函数,二个是用来管理操作成功后的结果的,另四个是用来拍卖操作退步后的案由的,这五个函数的首先个参数分别是成功后的结果和战败的原故。假若传给then方法的不是3个函数,那么这些参数会被忽视。


// /page/index.js
import { request, setStorage } from '../utils/wx-promise.js'

page({
 onLoad: () => {
  request({ url: 'http://api.yourapi.com' })
   .then(() => {
    //成功后处理
   })
   .then(() => {
    //失败后处理
   })
 },
 onHide: () => {
  setStorage({
   key: 'yourkey',
   data: 'yourvalue'
  })
   .then(() => {
    //保存成功
   })
   .then(() => {
    //保存失败
   })
 }
})

举例:

  then方法的重回值是多个Promise对象,那二个特征允许大家链式调用then来达成调节流程的成效。这里有数不完细节上的难题,例如值的传递大概错误管理等。Promise的正式是那样定义的:

to-promise是四个转移微信小程序异步API为Promise的一个工具库

项目地址:to-promise

import toPromise from '/module/to-promise/src/index'//转换wx.getStorage()const getStorage = toPromsie('getStorage') //使用getStorage({ key: 'test' }) .then(//欢迎加入全栈开发交流圈一起学习交流:864305860  => { //res的值与wx.getStorage({ success:  => {} })中的res值一样 //res = {data: 'keyValue'} console.log//控制台打印storage中key对于的value return res.data//如果需要继续链式调用转化后的api,需要把值显示返回 },  => { //err的值与wx.getStorage({ success:  => {} })中的err值一样 throw err } )//欢迎加入全栈开发交流圈一起学习交流:864305860

onFulfilled或许onRejected函数的重返值不是Promise对象,则该值将会作为下二个then方法中onFulfilled的第3个参数,假使重返值是贰个Promise对象,怎么then方法的重返值正是该Promise对象
onFulfilled或然onRejected函数中即便有13分抛出,则该then方法的归来的Promise对象景况转为Rejected,假设该Promise对象调用then,则Error对象会作为onRejected函数的第五个参数
一经Promise状态变为Fulfilled而在then方法中从不提供onFulfilled函数,则then方法再次来到的Promise对象意况变为Fulfilled且成功的结果为上八个Promise的结果,Rejected同理。
  补充一句,onFulfilled和onRejected都以异步实行的。

优点:

其余更加多更实际用法,直接粘贴README了,如下。

回到:
参数为小程序异步方法名。重临三个函数,该函数的参数与重临值如下。参数:
对应wx小程序异步方法中的参数除去success与fail后的目的。举例:官方APIwx.getLocation的OBJECT接受如下属性:
type altitude success fail complete,那么去除(success fail)后为:type
altitude complete。重回: (pending Promsise)
重临五个不解状态的Promise对象,在该对象上调用.then(onFulfilled,
onRejected)方法来管理对用成功或倒闭的气象。onFulfilled为呼吁成功后调用的回调函数,参数为再次来到值,onRejected为呼吁败北后的回调函数,参数为回去的错误音信。轻松点来讲,

专门的学业的落到实处:q

  1. 幸免小程序异步编制程序多次回调带来的过多回调导致逻辑不明显,篇幅过长等难题。
  2. 依据Promise异步编制程序特点,协理链式操作,像三头一样写异步。
  3. 4858美高梅 ,转车后得API大致和微信官方API同样。

to-promise是二个改造微信小程序异步API为Promise的2个工具库

const getLocation = toPromiseWx('getLocation')getLocation({ type: 'wgs84', altitude: true, complete: () => { console.log('to-promsise is awesome') }}).then => {//dosomething if succeed},  => {//dosomething if failed})

  下面讲的是Promise的正儿8经,而笔者辈须求的是它的兑现,q是二个对Promise/A+有着较好落成正式的库。

使用格局:

微信小程序异步API为Promise简化异步编制程序的操作方法,NodeJS中运用Promise来封装异步函数。优点:

与下部官方调用等价

  首先大家须要成立1个Promise对象,关于Promise对象创设的正儿8经在Promise/B中,这里不做详细的讲解,直接上代码。

  1. 安装

制止小程序异步编程数十二回回调带来的过多回调导致逻辑不清晰,篇幅过长等难点。
借助于Promise异步编制程序特点,帮衬链式操作,像1道同样写异步。
转车后得API差不离和微信官方API同样。

wx.getLocation({ type: 'wgs84',//欢迎加入全栈开发交流圈一起学习交流:864305860 altitude: true, complete: () => { console.log('to-promsise is awesome') }, success:  => {//dosomething if succeed}, fail:  => {//dosomething if failed}})

复制代码 代码如下:

  • 使用git安装到项目根目录/module,

使用格局:

接纳场景举个例子单次异步调用,参见API最终往往异步操作调用,且每下2遍调用都会用到前叁次回到的结果。如:获得GPS音信后,依照GPS信息获得天气新闻,获得天气新闻后立马存入localStorage。

    function(flag){
        var defer = q.defer();
        fs.readFile(“a.txt”, function(err, data){
        if(err) defer.reject(err);
            else defer.resolve(data);
            });
            return defer.promise;
    }

安装

`import toPromise from` `'/module/to-promise/src/index'``const toPromiseWx = toPrmise``//方法转换``const getLocation = toPromiseWx(``'getLocation'``)``const request = toPromiseWx(``'request'``)``const setStorage = toPromiseWx(``'setStorage'``)``//链式写逻辑``getLocation()` `//获取位置信息``.then => {` `//位置获取成功后的处理,res为返回信息``//处理res后返回有用的信息,这里直接返回res,用于演示``return` `Promise.resolve` `//必须``},`` => {` `//位置获取失败后的错误处理,err为错误信息``//错误处理``return` `Promise.resolve` `//必须``}``)``.then => {` `//根据位置获取成功后的信息,请求天气信息``return` `request({ url:` `'[http://api.weather.com](http://api.weather.com/)'``}) //返回一个pending 状态下的Promise``}``)`//帮助突破技术瓶颈,提升思维能力`.then => {` `//天气获取成功后存入storage的回调``setStorage({``key:` `'test'``,``data:` `'res'``})``},`` => {``//天气获取失败后执行这里,err为获取天气失败的错误信息``}``)`

  诸多Promise的贯彻在Promise的创办上海南大学学同小异,通过创制五个兼有promise属性的defer对象,假使成功博获得值则调用defer.resolve(value),要是败北,则调用defer.reject(reason),最后回来defer的promise属性就可以。那一个历程能够知晓为调用defer.resolve将Promise的图景形成Fulfilled,调用defer.reject将Promise的景况变成Rejected。

git clone https://github.com/tornoda/to-promise

使用git安装到花色根目录/module,

若果采纳官方的API写上述逻辑,代码是那样的:

  在直面一名目多数延续的异步方法时,怎么选用Promise写出特出的代码呢?看下上面包车型地铁事例。

  • 或直接下载放入项目目录下如:/module
git clone https://github.com/tornoda/to-promise
或直接下载放入项目目录下如:/module
在需要用到的地方引入
import toPromise from '/module/to-promise/src/index'
绑定微信全局对象(wx)到函数,以便可以取到微信得API
const toPromiseWx = toPromise(wx)
开始转化你需要得异步API
//apiName为微信异步方法名,如对wx.request()进行转化
const request = toPromiseWx('request')
//直接使用request方法
`wx.getLocation({``success:  => {``//some transformation with res``wx.request({``url:` `'[http://api.weather.com](http://api.weather.com/)'``,``success:  => {``wx.setStorage({``success: () => {``//do something``},``fail:  => {``//do something if err happend``}``})``},``fail:  => {``//do something if err happend``}`//欢迎加入全栈开发交流圈一起学习交流:864305860`})`//面向1-3年前端人员`},`//帮助突破技术瓶颈,提升思维能力`fail:  => {``//do something if err happend``})``//层层回调,麻烦

复制代码 代码如下:

  1. 在要求使用的地点引进

举例:

结语

    promise0.then(function(result){
        // dosomething
        return result;
    }).then(function(result) {
        // dosomething
        return promise1;   
    }).then(function(result) {
        // dosomething
    }).catch(function(ex) {
        console.log(ex);
    }).finally(function(){
        console.log(“final”);
    });

import toPromise from '/module/to-promise/src/index'
//转换wx.getStorage()
const getStorage = toPromsie(wx)('getStorage') 
//使用
getStorage({ key: 'test' })
 .then(
  (res) => {
   //res的值与wx.getStorage({ success: (res) => {} })中的res值一样
   //res = {data: 'keyValue'}
   console.log(res.data)//控制台打印storage中key对于的value
   return res.data//如果需要继续链式调用转化后的api,需要把值显示返回
  },
  (err) => {
   //err的值与wx.getStorage({ success: (err) => {} })中的err值一样
   throw err
  }
 )

多谢您的看到,如有不足之处,接待商量指正。

  在上面的代码中,then方法只接受OnFulfilled,而catch方法其实就是then(null,
OnRejected),那样的话只要壹雨后冬笋异步方法只要始终是成功再次回到值的,那么代码就能够瀑布式的向下运作,假如内部专擅贰个异步方法失利恐怕爆发至极,那么依照CommonJs的Promise标准,将进行catch中的function。q还提供了finally方法,从字面上也很好精晓,正是不管resolve依然reject,最终都会实践finally中的function。

import toPromise from '/module/to-promise/src/index'

有关Promise对象的行使,请参见Promise

此次给我们推荐3个无偿的学习群,里面包罗移动接纳网址开荒,css,html,webpack,vue
node
angular以及面试能源等。对web开荒才干感兴趣的同班,迎接参加Q群:864305860,不管你是小白照旧大咖小编都接待,还有大腕整理的一套高功能学习路径和科目与你免费享用,同时每一天更新录制素材。最终,祝我们早日成功,获得满足offer,火速升职加薪,走上人生巅峰。

  看上去如同不错,代码更以维护且美观了,那么只要愿意出现呢?

  1. 绑定微信全局对象(wx)到函数,以便能够取到微信得API

API

复制代码 代码如下:

toPromise(global)

     q.all([promise0, promise1, promise2]).spread(function(val0, val1,
val2){
                    console.log(arguments);
                }).then(function(){
                    console.log(“done”);
                }).catch(function(err){
                    console.log(err);
                });

const toPromiseWx = toPromise(wx)

参数

  q也为出现提供了api,调用all方法并传递多少个Promise数组就能够继续行使then的链式风格。还有像q.nfbind等能够将Node.js的原生API转化成Promise来统一代码格式也是挺好的。愈来愈多api在此间就不1一详述了。

  1. 开首倒车你须要得异步API

(wx): wx全局对象。即toPromise(wx)那样调用

结论

返回

  本文首要介绍通过动用Promise来消除Node.js调整流难点,但Promise也可同等应用于前端,EMCAScript六已经提供了原生的API协助。供给提出的是Promise并不是举世无双的化解方案,async也是贰个很好的取舍,并且提供更要好的出现调控API,可是本人以为Promise在封装具备异步方法的函数时更具优势。

//apiName为微信异步方法名,如对wx.request()进行转化
const request = toPromiseWx('request')
//直接使用request方法

(function):
参数(string)为小程序异步方法名。再次回到1个函数,该函数的参数与再次回到值如下。

好了,本文就先到此地了,希望对大家能够享有支持。

举例:

参数:(object)
对应wx小程序异步方法中的参数(OBJECT)除去success与fail后的目的。比如:

你或者感兴趣的篇章:

  • 比方详解JavaScript中Promise的使用
  • JavaScript中的Promise使用详解
  • JavaScript Promise 用法
  • JavaScript异步编制程序Promise格局的四个特点
  • 理解JavaScript中Promise的使用
  • 详尽解读JavaScript编制程序中的Promise使用
  • JavaScript异步回调的Promise情势封装实例
  • Javascript中的异步编制程序规范Promises/A详细介绍
  • NodeJS的Promise的用法解析
  • JS中Promise函数then的精深钻探
import toPromise from '/module/to-promise/src/index'

//转换wx.getStorage()
const getStorage = toPromsie(wx)('getStorage') 

//使用
getStorage({ key: 'test' })
  .then(
    (res) => {
      //res的值与wx.getStorage({ success: (res) => {} })中的res值一样
      //res = {data: 'keyValue'}
      console.log(res.data)//控制台打印storage中key对于的value
      return res.data//如果需要继续链式调用转化后的api,需要把值显示返回
    },
    (err) => {
      //err的值与wx.getStorage({ success: (err) => {} })中的err值一样
      throw err
    }
  )

法定APIwx.getLocation(OBJECT)的OBJECT接受如下属性: type altitude
success fail complete,那么去除(success fail)后为:type altitude
complete。

至于Promise对象的选取,请参见Promise

回去: (pending Promsise)
重返2个不明不白状态的Promise对象,在该目的上调用.then(onFulfilled,
onRejected)方法来拍卖对用成功或失败的状态。onFulfilled为呼吁成功后调用的回调函数,参数为重临值,onRejected为呼吁退步后的回调函数,参数为回到的错误消息。

API

简短点来讲,

  • toPromise(global)
const getLocation = toPromiseWx('getLocation')
getLocation({
 type: 'wgs84',
 altitude: true,
 complete: () => { console.log('to-promsise is awesome') }
}).then(
 (res) => {//dosomething if succeed},
 (err) => {//dosomething if failed}
)

参数

与下部官方调用等价

(wx): wx大局对象。即toPromise(wx)那般调用

wx.getLocation({
 type: 'wgs84',
 altitude: true,
 complete: () => { console.log('to-promsise is awesome') },
 success: (res) => {//dosomething if succeed},
 fail: (err) => {//dosomething if failed}
})

返回

利用场景举例

(function):
参数(string)为小程序异步方法名。再次回到3个函数,该函数的参数与重返值如下。

  • 单次异步调用,参见API最终
  • 频仍异步操作调用,且每下二次调用都会用到前壹回回到的结果。

参数:(object)
对应wx小程序异步方法中的参数(OBJECT)除去successfail后的对象。举个例子:

如:获得GPS消息后,依据GPS音讯获得天气消息,获得天气音讯后立马存入localStorage。

官方APIwx.getLocation(OBJECT)OBJECT接受如下属性: type
altitude success fail complete,那么去除(success
fail)后为:type altitude complete

import toPromise from '/module/to-promise/src/index'
const toPromiseWx = toPrmise(wx)
//方法转换
const getLocation = toPromiseWx('getLocation')
const request = toPromiseWx('request')
const setStorage = toPromiseWx('setStorage')
//链式写逻辑
getLocation() //获取位置信息
 .then(
  (res) => { //位置获取成功后的处理,res为返回信息
   //处理res后返回有用的信息,这里直接返回res,用于演示
   return Promise.resolve(res) //必须
  },
  (err) => { //位置获取失败后的错误处理,err为错误信息
   //错误处理
   return Promise.resolve(err) //必须
  }
 )
 .then(
  (res) => { //根据位置获取成功后的信息,请求天气信息
   return request({ url: 'http://api.weather.com'}) //返回一个pending 状态下的Promise
  }
 )
 .then(
  (res) => { //天气获取成功后存入storage的回调
   setStorage({
    key: 'test',
    data: 'res'
   })
  },
  (err) => {
   //天气获取失败后执行这里,err为获取天气失败的错误信息
  }
 )

返回: (pending Promsise)
重返三个不明不白状态的Promise对象,在该对象上调用.then(onFulfilled,
onRejected)方法来拍卖对用成功或停业的场馆。onFulfilled为呼吁成功后调用的回调函数,参数为重临值,onRejected为呼吁失利后的回调函数,参数为回到的错误消息。

借使采纳官方的API写上述逻辑,代码是如此的:

轻松点来讲,

wx.getLocation({
 success: (res) => {
  //some transformation with res
  wx.request({
   url: 'http://api.weather.com',
   success: (res) => {
    wx.setStorage({
     success: () => {
      //do something
     },
     fail: (err) => {
      //do something if err happend
     }
    })
   },
   fail: (err) => {
    //do something if err happend
   }
  })
 },
 fail: (err) => {
  //do something if err happend
})
//层层回调,如果逻辑再复杂点,可能就疯了
const getLocation = toPromiseWx('getLocation')
getLocation({
  type: 'wgs84',
  altitude: true,
  complete: () => { console.log('to-promsise is awesome') }
}).then(
  (res) => {//dosomething if succeed},
  (err) => {//dosomething if failed}
)

总结

与下部官方调用等价

上述所述是笔者给大家介绍的微信小程序异步API为Promise简化异步编制程序,希望对大家具有辅助,假诺大家有别的疑问请给笔者留言,笔者会及时还原大家的。在此也非凡谢谢我们对剧本之家网址的帮忙!

wx.getLocation({
  type: 'wgs84',
  altitude: true,
  complete: () => { console.log('to-promsise is awesome') },
  success: (res) => {//dosomething if succeed},
  fail: (err) => {//dosomething if failed}
})

你恐怕感兴趣的稿子:

  • 微信小程序之付出后调用SDK的异步通告及注脚管理订单方法
  • 微信小程序异步管理详解
  • 微信小程序中运用Promise举办异步流程管理的实例详解
  • 详解微信小程序
    同步异步化解办法
  • 微信小程序
    wx.request方法的异步封装实例详解
  • 微信小程序
    缓存(本地缓存、异步缓存、同步缓存)详解

动用场景举个例子

  1. 单次异步调用,参见API最终
  2. 多次异步操作调用,且每下3遍调用都会用到前一遍回到的结果。
    如:获得GPS新闻后,依据GPS消息获得天气音讯,取得天气音讯后立马存入localStorage。

import toPromise from '/module/to-promise/src/index'

const toPromiseWx = toPrmise(wx)

//方法转换
const getLocation = toPromiseWx('getLocation')
const request = toPromiseWx('request')
const setStorage = toPromiseWx('setStorage')

//链式写逻辑
getLocation() //获取位置信息
  .then(
    (res) => { //位置获取成功后的处理,res为返回信息
      //处理res后返回有用的信息,这里直接返回res,用于演示
      return Promise.resolve(res) //必须
    },
    (err) => { //位置获取失败后的错误处理,err为错误信息
      //错误处理
      return Promise.resolve(err) //必须
    }
  )
  .then(
    (res) => { //根据位置获取成功后的信息,请求天气信息
      return request({ url: 'http://api.weather.com'}) //返回一个pending 状态下的Promise
    }
  )
  .then(
    (res) => {  //天气获取成功后存入storage的回调
      setStorage({
        key: 'test',
        data: 'res'
      })
    },
    (err) => {
      //天气获取失败后执行这里,err为获取天气失败的错误信息
    }
  )

要是应用官方的API写上述逻辑,代码是如此的:

wx.getLocation({
  success: (res) => {
    //some transformation with res
    wx.request({
      url: 'http://api.weather.com',
      success: (res) => {
        wx.setStorage({
          success: () => {
            //do something
          },
          fail: (err) => {
            //do something if err happend
          }
        })
      },
      fail: (err) => {
        //do something if err happend
      }
    })
  },
  fail: (err) => {
    //do something if err happend
})
//层层回调,如果逻辑再复杂点,可能就疯了

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有