.on事件获取值后返回承诺

问题描述

我正在使用ml5.js PoseNet。我有一个获取图像的函数,并且试图返回PoseNet生成的单个姿势。我也想返回此值作为承诺。使用下面的toReturn,它会在姿势完成生成之前返回,因此是不确定的(因为我想是异步特性)。我该如何解决?

async function addPose(img){
    let options = {
        imageScaleFactor: 1,minConfidence: 0.1
    }

    let poseNet = ml5.poseNet(modelReady,options);

    function modelReady(){
        console.log('model loaded');
        let result = poseNet.singlePose(img);    // a promise of JSON value
        // return result;
    }

    let toReturn;

    poseNet.on('pose',function(results){
        toReturn = results[0]     // the JSON value
        // return results[0]
    })
    return toReturn;
}

解决方法

我对ML5.js不熟悉,但是您应该使用await强制它等待它返回,然后再执行其他操作。

例如:

let result = await poseNet.singlePose(img); 

要在加载模型后在可调用函数中获得此功能,应重新洗改代码:

let modelLoaded = false;

async function loadModel() {

  let options = {
    imageScaleFactor: 1,minConfidence: 0.1
  }

  let poseNet = ml5.poseNet(modelReady,options);
}

loadeModel();


function modelReady(){
    console.log('model loaded');
    modelLoaded = true;

    // Feel free to register for events if you want:
    poseNet.on('pose',function(results){
      console.log(results[0]);
    });
}


function checkImage(img) {
  if (modelLoaded) {
    let result = poseNet.singlePose(img);
    return result;
  }

  return false;
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...