微信小程序云開發(fā)SDK文檔 云函數(shù)

2022-05-12 16:33 更新

Promise Cloud.callFunction(Object object)

支持端:小程序 , 云函數(shù)

調(diào)用云函數(shù)

參數(shù)

Object object

屬性類型默認(rèn)值必填說明
namestring云函數(shù)名
dataObject傳遞給云函數(shù)的參數(shù),在云函數(shù)中可通過 event 參數(shù)獲取
configObject配置
successfunction接口調(diào)用成功的回調(diào)函數(shù)
failfunction接口調(diào)用失敗的回調(diào)函數(shù)
completefunction接口調(diào)用結(jié)束的回調(diào)函數(shù)(調(diào)用成功、失敗都會(huì)執(zhí)行)

object.config 的結(jié)構(gòu)

屬性類型默認(rèn)值必填說明
envstring環(huán)境 ID,填寫后將忽略 init 時(shí)指定的環(huán)境 ID

返回值

Promise.<Object>

屬性類型說明
resultany云函數(shù)返回的結(jié)果
requestIDstring云函數(shù)執(zhí)行 ID,可用于日志查詢

data 參數(shù)說明

如果 data 中包含大數(shù)據(jù)字段(建議臨界值 256KB),建議使用 wx.cloud.CDN 標(biāo)記大數(shù)據(jù)字段,標(biāo)記后在調(diào)用云函數(shù)時(shí),該字段的內(nèi)容將會(huì)上傳至臨時(shí) CDN,然后在云函數(shù)中接收到的該字段值將是 CDN url,可在云函數(shù)中下載訪問。通過這種方式,可以避免大數(shù)據(jù)傳輸造成的性能問題、及避免觸及調(diào)用鏈路的傳輸大小限制。

如果在 data 中如果傳入了 Buffer 類型的數(shù)據(jù),數(shù)據(jù)在 JSON 序列化的過程中會(huì)被轉(zhuǎn)成 { "type": "Buffer", data: number[] } 的格式,以小程序端調(diào)用為例:

// 小程序端調(diào)用
wx.cloud.callFunction({
  // ...
  data: {
    buf: ArrayBuffer // 此處填入了某種方式獲取得到的 Buffer 數(shù)據(jù),可以是 request 下來的,可以是讀文件讀出來的等等
  },
})
// 云函數(shù)端收到的 event 參數(shù)的結(jié)構(gòu):
{
  "type": "Buffer",
  "data": [ 17, 371, 255, ... ] // Uint8 Array
}

因此應(yīng)當(dāng)避免傳入 Buffer 類型的數(shù)據(jù),因?yàn)闀?huì)讓數(shù)據(jù)體積增大,增加傳輸耗時(shí),如果需要傳遞 Buffer,有兩種替代的建議方式:

  1. 若 Buffer 較大,可使用 wx.loud.CDN 方法標(biāo)記字段內(nèi)容
  2. 若 Buffer 非常小 (如 < 10k),可將 Buffer 轉(zhuǎn)成 base64 再調(diào)用

示例代碼

假設(shè)已有一個(gè)云函數(shù) add:

exports.add = (event, context, cb) => {
  return event.x + event.y
}

在小程序端發(fā)起對(duì)云函數(shù) add 的調(diào)用:

wx.cloud.callFunction({
  // 要調(diào)用的云函數(shù)名稱
  name: 'add',
  // 傳遞給云函數(shù)的event參數(shù)
  data: {
    x: 1,
    y: 2,
  }
}).then(res => {
  // output: res.result === 3
}).catch(err => {
  // handle error
})

在云函數(shù)端任意云函數(shù)發(fā)起對(duì)云函數(shù) add 的調(diào)用(完整云函數(shù)代碼示例):

const cloud = require('wx-server-sdk')
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})

exports.main = async (event, context) => {
  const res = await cloud.callFunction({
    // 要調(diào)用的云函數(shù)名稱
    name: 'add',
    // 傳遞給云函數(shù)的參數(shù)
    data: {
      x: 1,
      y: 2,
    }
  })
  // 3
  return res.result
}

小程序端 callback 風(fēng)格調(diào)用:

小程序端同時(shí)支持 Callback 風(fēng)格調(diào)用,如上 Promise 風(fēng)格的調(diào)用可以用 Callback 風(fēng)格改寫:

wx.cloud.callFunction({
  // 要調(diào)用的云函數(shù)名稱
  name: 'add',
  // 傳遞給云函數(shù)的參數(shù)
  data: {
    x: 1,
    y: 2,
  },
  success: res => {
    // output: res.result === 3
  },
  fail: err => {
    // handle error
  },
  complete: () => {
    // ...
  }
})


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)