react navite process.nextTick 和 Promise.then 的执行顺序

在 React Native 里,process.nextTick() 和 Promise.then() 的执行顺序,不能简单套用浏览器的 Event Loop 规则。关键取决于 RN 使用的 JS Runtime(Hermes / JSC)以及 RN 的调度机制。

如果是在常见的 Hermes 环境下,可以先记住:

javascript 复制代码
process.nextTick(() => {
  console.log('nextTick');
});

Promise.resolve().then(() => {
  console.log('promise');
});

console.log('sync');

通常输出:

arduino 复制代码
sync
nextTick
promise

也就是:

arduino 复制代码
同步代码
   ↓
process.nextTick
   ↓
Promise.then
   ↓
其他异步任务

为什么?

Node.js 中,process.nextTick() 有一个专门的 nextTick queue,优先级高于 Promise microtask:

arduino 复制代码
┌─────────────────────┐
│ 同步 JavaScript      │
└──────────┬──────────┘
           ↓
┌─────────────────────┐
│ process.nextTick    │  ← 更高优先级
└──────────┬──────────┘
           ↓
┌─────────────────────┐
│ Promise microtask   │
│ queue               │
└──────────┬──────────┘
           ↓
┌─────────────────────┐
│ timer / IO / ...    │
└─────────────────────┘

但是这里有一个非常重要的 RN 特殊点:

RN 不是 Node.js

React Native 里的:

arduino 复制代码
process.nextTick

并不是因为 RN 运行在 Node.js 中才存在的。RN/Metro 可能提供 Node API 的 polyfill,而不同 RN 版本、Hermes/JSC 配置下具体实现可能不同。

所以不要把下面这个 Node.js 结论无条件套到 RN:

arduino 复制代码
process.nextTick > Promise.then

尤其是现代 React Native + Hermes 环境,process.nextTick 的行为需要看实际 runtime/polyfill。

你可以直接测试:

javascript 复制代码
console.log('1');

process.nextTick(() => {
  console.log('2 nextTick');
});

Promise.resolve().then(() => {
  console.log('3 promise');
});

queueMicrotask?.(() => {
  console.log('4 microtask');
});

console.log('5');

如果你的目标是解决 RN 中某段代码到底谁先执行 的问题,最好把你当前 RN 版本、Hermes/JSC,以及这段代码贴出来,我可以按 RN Event Loop → Hermes Microtask → MessageQueue → React Scheduler 给你画出完整执行链。

相关推荐
陈随易7 分钟前
副业搞钱点子之收入查看器
前端·后端
Profile排查笔记9 分钟前
浏览器指纹逆向怎么分析:从网络请求追踪到 JavaScript 采集链
前端·人工智能·后端·自动化
hudie76537 分钟前
LikeShop 二开最常改的 5 个文件(附改前改后对比)
前端·uni-app·php·个人开发
qetfw1 小时前
Bash 函数与流程控制:read、if、for、case 验证
linux·前端·javascript·bash
鬼手点金2 小时前
从 API 消息到模型 Token:Chat Template
java·前端·javascript·数据库·人工智能·深度学习·1024程序员节
Shadow(⊙o⊙)2 小时前
LangChain 自定义工具全解析:从 @tool 到 bind_tools 的完整调用链路
java·服务器·前端·1024程序员节
小poop2 小时前
HTML 基础入门:从结构到常用标签详解
前端
jiangliushi62 小时前
GPT-6.1 Sol 免费用:PowerShell 装 Codex 报“禁止运行脚本 npm.ps1”?一条命令解决
前端·gpt·npm
计算机魔术师2 小时前
日均500万亿词元,国内推理速度翻倍却仍落后国外——差距卡在哪
前端
excel3 小时前
用 Node.js 搭建一套可持续获客的 SEO 内容系统:前端工程师 30 天实战方案
前端·后端