小程序-async / await 與 http

一、前言

(1)開啓

在微信小程序(基礎庫 2.8.3)中使用 async 與 await,需要“取消勾選ES6轉ES5”或者“勾選增強編譯”。

 

(2)Promise

Promise 用於解決肆虐在回調代碼中控制倒轉的問題。
它沒有擺脫回調,而是重新定向了這些回調的組織安排方式。Promise 鏈還以順序的風格定義了一種更好的表達異步流程的方式,幫助我們更好地規劃和維護異步JS代碼。

(3)雲函數的 npm install

在雲函數的文件夾右鍵,選擇在終端中打開,再執行 npm install 命令。

二、async / await

2.1、當一個方法加上 async 聲明

(1)這個方法的返回結果就變成了一個 Promise,可以 .then() 來繼續對返回值進行處理;
(2)方法體中就可以使用 await 關鍵詞來同步的獲取異步結果。

2.2、一個示例

  test_async : async function(){
    var result = await wx.cloud.callFunction({
        name: "http",
        data: {
          url: "http://******/"
        }
      });

    console.log(result);
  }

三、http

3.1、建立 HTTP 雲函數

(1)建立雲函數並命名爲 http

(2)index.js 代碼爲

// 雲函數入口文件
const cloud = require('wx-server-sdk');
const request = require('got');

cloud.init()

// 雲函數入口函數
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  const url = event.url;
  const method = event.method || 'get'; 
  var options = {};
  options.method = method;
  if(event.headers) options.headers = event.headers;
  if(event.body) options.body = JSON.stringify(event.body);

  let response = await request(url, options);

  return response.body;
}

(3)got module 的安裝

上述代碼中,使用到 require('got'),表示依賴於 got 模塊,需要進行安裝。安裝步驟:
1)在雲函數 http 文件夾上右鍵,選擇“在終端中打開”
2)執行以下命令安裝

npm install --save got

3)在雲函數 http 下的 node_modules 上右鍵,選擇“雲函數增量上傳:更新文件夾”。這一步的目的是把安裝的 got 上傳到微信雲端。
如果在 http 上選擇“上傳所有文件”,則在本地也需要執行以下命令把 wx-server-sdk 在本地安裝一下。

npm install --save wx-server-sdk

3.2、使用示例

(1)get 方式

  test_http_get: function () {
    wx.cloud.callFunction({
      name: "http",
      data: { 
        url: "http://******/api?a=1&b=2" 
      },
      success: function (resp) {
        var data = resp.result; 
        console.log(data);
      },
      fail: function (err) {
        console.log(err);
      }
    });
  }

(2)post 方式,body 內容爲 json 的情形

  test_http_post: function () {
    wx.cloud.callFunction({
      name: "http",
      data: {
        method: "POST",
        url: "http://******/api",
        headers: {
          'Content-Type': 'application/json'
        },
        body: {
          a: 1,
          b: 2
        }
      },
      success: function (resp) {  
        var data = JSON.parse(resp.result);
        console.log(data);
      },
      fail: function (err) {
        console.log(err);
      }
    });

四、參考

(1)async await 處理異步變同步(微信小程序內舉例)
(2)微信小程序雲開發(雲函數)學習筆記01-發送http請求
(3)https://www.npmjs.com/package/got

發佈了58 篇原創文章 · 獲贊 23 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章