HarmonyOS 调用napi_resolve_deferred后的代码,和promise.then中的回调函数哪个会先执行呢

参考这里的native c++代码:

napi_create_async_work(env, nullptr, resourceName, ExecuteCB, CompleteCB, callbackData, &callbackData->asyncWork);

static void CompleteCB(napi_env env, napi_status status, void *data)
{
  CallbackData *callbackData = reinterpret_cast<CallbackData *>(data);
  napi_value result = nullptr;
  napi_create_double(env, callbackData->result, &result);
  if (callbackData->result > 0) {
    napi_resolve_deferred(env, callbackData->deferred, result);
  } else {
    napi_reject_deferred(env, callbackData->deferred, result);
  }

  sleep(1);
  funcA();

  napi_delete_async_work(env, callbackData->asyncWork);
  delete callbackData;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.

ArkTS代码:

// ArkTS侧调用接口 
let res = await nativeModule.asyncWork(1024); 
funcB();
  • 1.
  • 2.
  • 3.

代码如上所示,在cpp代码中调用napi_resolve_deferred函数修改promise的状态,ArkTS侧异步函数就会被唤醒继续往下执行。上面代码中c++中的funcA函数和ArkTS中funcB函数哪个会先执行呢?实际测试发现funcB先执行,funcB执行完后才会执行funcA,这是为什么,funcA和funcB应该都是在ArkTS主线程执行的,ArkTS不是单线程模型吗?

HarmonyOS
2024-12-25 08:44:35
1488浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
zbw_apple

napi_resolved会将promise状态改为resolved,放入微任务队列,退出时执行微任务队列,所以B先执行napi_resolved返回后继续执行sleep及以下逻辑。

分享
微博
QQ
微信
回复
2024-12-25 11:05:14
相关问题
NAPI执行上层时,如何获取env
3134浏览 • 1回复 待解决
Ability生命周期函数有哪些
6492浏览 • 1回复 待解决
如何在NAPI执行上层时获取env
797浏览 • 1回复 待解决
如何在ArkTS代码执行HTML内JS函数
3348浏览 • 1回复 待解决