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;
}

ArkTS代码:

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

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

HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zbw_apple

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

分享
微博
QQ
微信
回复
1天前
相关问题
NAPI执行上层时,如何获取env
2318浏览 • 1回复 待解决
Ability生命周期函数有哪些
5735浏览 • 1回复 待解决
如何在NAPI执行上层时获取env
370浏览 • 1回复 待解决
如何在ArkTS代码执行HTML内JS函数
2381浏览 • 1回复 待解决
@Watch装饰器执行顺序
322浏览 • 1回复 待解决