马昌娟 發表於 2019-10-18 14:40:00

微信小程序开发(十二)Promise将异步改为同步

<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> utils/utils.js<br></span></pre>
<p>&nbsp; /**&nbsp;</p>
<p>&nbsp; * requestPromise用于将wx.request改写成Promise方式&nbsp;</p>
<p>&nbsp; * @param:{string} myUrl 接口地址&nbsp;</p>
<p>&nbsp; * @return: Promise实例对象&nbsp;</p>
<p>&nbsp; */&nbsp;</p>
<pre><span style="color: rgba(0, 0, 255, 1)">const</span> requestPromise = myUrl =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 返回一个Promise实例对象 </span>
<span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">new</span> Promise((resolve, reject) =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
    wx.request({
      url: myUrl,
      success: res </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> resolve(res)
    })
})
}

module.exports </span>=<span style="color: rgba(0, 0, 0, 1)"> {
requestPromise: requestPromise
}



</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> pages/test/test.js
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 导入util.js文件</span>
<span style="color: rgba(0, 0, 255, 1)">const</span> utilApi = require(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">../../utils/util.js</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)

Page({
data: {
    myData: </span><span style="color: rgba(128, 0, 0, 1)">''</span><span style="color: rgba(0, 0, 0, 1)">
},
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> loadMyData函数用于打印myData的值 </span>
<span style="color: rgba(0, 0, 0, 1)">loadMyData() {
    console.log(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">获取到的数据为:</span><span style="color: rgba(128, 0, 0, 1)">'</span> + <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.data.myData)
},
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 生命周期函数onload用于监听页面加载 </span>
<span style="color: rgba(0, 0, 0, 1)">onLoad: function() {
    utilApi.requestPromise(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">http://172.20.10.10:8080/wx?name=小明&amp;oaid=xiaoming</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 使用.then处理结果 </span>
.then(res =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.log(res.data)
      </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setData({
          myData: res.data
      })
      console.log(</span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.data.myData)
      </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.loadMyData()
      })
}
})</span></pre>
</div>
<p>当有多个异步请求时,直接不断地.then(fn)去处理即可,逻辑清晰。</p>
<p>当然,这里只是写了一个最简单的Promise函数,还不完整。更完整的Promise化wx.request,等以后业务需要再完善吧。另外各种小程序开发框架也都有了现成的promise化API,拿来即用。</p><br><br>
来源:https://www.cnblogs.com/aaronthon/p/11698201.html
頁: [1]
查看完整版本: 微信小程序开发(十二)Promise将异步改为同步