本文作者:99ANYc3cd6

抖音promise

99ANYc3cd6 01-10 18
抖音promise摘要: 当用户或开发者提到“抖音Promise”时,它通常不是指 JavaScript 的 Promise 对象,而是特指抖音官方提供给开发者的、一套用于异步操作和获取抖音平台能力的 AP...

当用户或开发者提到“抖音Promise”时,它通常不是指 JavaScript 的 Promise 对象,而是特指抖音官方提供给开发者的、一套用于异步操作和获取抖音平台能力的 API(应用程序编程接口)体系

抖音promise
(图片来源网络,侵删)

这个体系的核心思想就是异步,和 JavaScript 的 Promise 概念非常相似,但在抖音生态里,它特指与抖音服务器、用户设备、抖音功能进行交互的接口。


为什么需要“抖音Promise”?

抖音是一个复杂的 App,很多操作都不能立即完成,需要等待。

  1. 获取用户信息:App 需要向抖音服务器请求,服务器返回用户数据,这个过程需要时间。
  2. 上传视频:将一个大的视频文件从你的手机上传到抖音服务器,这是一个漫长的异步过程。
  3. 发起支付:需要与抖音支付服务器通信,完成交易。
  4. 获取设备权限:比如请求使用摄像头、麦克风,需要用户授权,这个结果是不可预知的。

如果这些操作是“同步”的,App 会在等待期间卡死,用户体验极差,抖音官方将这些耗时操作都设计成了异步操作,并通过一套统一的“Promise”风格的 API 来暴露结果。


“抖音Promise”的核心特点

虽然叫“Promise”,但它和 JS 的 Promise 类型和用法上略有不同,但理念相通。

API 形式:dd.xxx(options).then(...).catch(...)

这是最典型的形式,抖音(在小程序或 H5 环境下,通常通过 dd 对象)提供的很多 API 都是返回一个“Promise”对象。

示例:获取用户信息

// 假设这是在抖音小程序或 H5 环境中
dd.getAuthCode({
  scopes: 'auth_user', // 请求获取用户授权码
  success: (res) => {
    console.log('授权码获取成功:', res.authCode);
    // 这里通常还需要用 authCode 去换取用户信息
  },
  fail: (err) => {
    console.log('授权失败:', err);
  }
});
// 使用 Promise 风格的写法 (更现代、更优雅)
dd.getAuthCode({ scopes: 'auth_user' })
  .then(res => {
    console.log('授权码获取成功:', res.authCode);
    // 返回一个新的 Promise,继续链式调用
    return dd.getUserInfo(); // 假设有这个方法
  })
  .then(userInfo => {
    console.log('获取用户信息成功:', userInfo);
  })
  .catch(err => {
    console.error('在整个授权和信息获取过程中发生错误:', err);
  });

注意:在抖音小程序中,很多 API 同时支持传统的 success/fail 回调函数和 Promise 风格,开发者可以根据喜好选择。

状态:Pending, Fulfilled, Rejected

这套 API 的内部逻辑和 JS Promise 完全一致:

  • Pending (进行中):API 调用发出,但抖音服务器还未返回结果。
  • Fulfilled (已成功):操作成功完成。.then() 回调函数会被执行,并接收到成功的结果(一个对象,通常包含 success, data, error 等字段)。
  • Rejected (已拒绝):操作失败。.catch() 回调函数会被执行,并接收到错误信息。

具体应用场景(开发者视角)

作为开发者,你会在以下场景中频繁使用“抖音Promise”:

抖音小程序开发

这是“抖音Promise”最主要的战场,几乎所有与平台能力交互的 API 都是异步的。

  • 用户授权dd.getAuthCode, dd.getUserInfo
  • 支付dd.pay
  • 设备能力dd.camera, dd.scan (扫码)
  • 分享dd.share
  • 导航dd.navigation

代码示例:发起抖音支付

function doPayment() {
  const orderInfo = {
    orderToken: 'your_order_token_from_server',
    // ...其他支付参数
  };
  dd.pay(orderInfo)
    .then(result => {
      if (.resultCode === 0) {
        dd.alert({ content: '支付成功!' });
        // 支付成功后的逻辑,比如跳转页面
      } else {
        dd.alert({ content: `支付失败,错误码: ${result.resultCode}` });
      }
    })
    .catch(error => {
      // 网络错误、用户取消等情况会进入这里
      dd.alert({ content: `支付过程出错: ${error.errorMessage}` });
    });
}

抖音开放平台与 H5 页面

当你在非小程序的 H5 页面中集成抖音能力时(比如使用抖音登录、分享),也会用到类似的 Promise 风格的 JS-SDK。

  • 抖音登录:调用 JS-SDK 的方法,用户授权后,H5 页面会收到一个回调,这个回调处理逻辑也常会用 Promise 来封装。

抖音直播/短视频互动插件

如果你开发的是嵌入在抖音直播间或短视频中的互动插件,插件与抖音主 App 的通信也是异步的,同样会涉及到类似的异步调用模式。


与浏览器/Node.js 中原生 Promise 的区别

特性 浏览器/Node.js Promise 抖音 Promise (API)
来源 JavaScript 语言内置的,用于处理任何异步操作(网络请求、定时器等)。 抖音官方平台提供的,专门用于调用抖音平台特定能力的 API。
创建方式 new Promise(executor)Promise.resolve()/Promise.reject() 通过调用 dd.xxx() 或类似的全局 API 来创建,你不能 new 一个抖音 Promise。
错误处理 .catch().then() 的第二个参数。 .catch() 或传统的 fail 回调。
执行环境 在任何支持 JS 的环境中运行。 严格限定在抖音 App 的环境中,如抖音小程序、H5 页面等,在浏览器中直接调用 dd.xxx() 会报错。

下次当你听到“抖音Promise”时,可以这样理解:

它不是一门新技术,而是抖音官方为其平台能力(支付、登录、分享等)设计的一套异步API接口,这套接口的调用方式和返回结果(通过 .then.catch 处理成功和失败)借鉴了 JavaScript Promise 的思想,目的是让开发者能更优雅、更可控地处理与抖音平台的异步交互。

对于普通用户来说,这个词基本不会接触到,但对于想要在抖音生态中开发应用、小程序或 H5 页面的开发者来说,“抖音Promise”是必须掌握的核心概念之一

文章版权及转载声明

作者:99ANYc3cd6本文地址:https://chumoping.net/post/9538.html发布于 01-10
文章转载或复制请以超链接形式并注明出处初梦运营网

阅读
分享