首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >promise.then()和promise.catch()不在节点程序中工作

promise.then()和promise.catch()不在节点程序中工作
EN

Stack Overflow用户
提问于 2018-12-03 08:21:35
回答 2查看 156关注 0票数 0

我正在尝试显示一个实时流,由opencv4nodejs读取,并由人脸识别模块处理。这里的问题是,promise.then()不能工作。甚至没有在相应的条件下捕获()。(我是节点和承诺的新手。)预期工作流程:

读取帧从摄像头(通过cv.read) ->保存到缓冲区(由cv.imwrite) ->读取帧从缓冲区(由fr.loadImage) ->进程(由detector.locateFaces) ->显示->重复处理。

代码语言:javascript
复制
const fr = require('face-recognition');
const cv = require('opencv4nodejs');
const events = require('events');

const detector = fr.FaceDetector()
const cap = new cv.VideoCapture(0);
const win = new fr.ImageWindow()
const eventEmitter = new events.EventEmitter();

function process(){
    console.log('process');
    return new Promise(function(resolve,reject){
        console.log('promise');
        var frame = cap.read();
        cv.imwrite(`${__dirname}/buffer/img.jpg`, frame);
        if(frame != null)
            resolve('resolve');
        else
            reject('Problem While reading');
    });
}
eventEmitter.on('read',function(string){
    console.log('event call');
    var promise = process();
    promise.then(function(string){
        console.log(string);
        const image = fr.loadImage(`${__dirname}/buffer/img.jpg`);
        const faceRectangles = detector.locateFaces(image);
        win.setImage(image);
        fr.hitEnterToContinue();
    }).catch(function(err){
        console.log(err);
    });
});
while(true){
    console.log('emit');
    eventEmitter.emit('read','abcd');
}
/*****expected output should be*****
emit
event call
process
promise
resolve
/*****getting output*****
emit
event call
process
promise
*/
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-06 18:02:39

代码语言:javascript
复制
const fr = require('face-recognition');
const cv = require('opencv4nodejs');
const events = require('events');

const detector = fr.FaceDetector()
const cap = new cv.VideoCapture(0);
const win = new fr.ImageWindow()
const eventEmitter = new events.EventEmitter();

function process(){
    console.log('process');
    return new Promise(function(resolve,reject){
        console.log('promise');
        var frame = cap.read();
        cv.imwrite(`${__dirname}/buffer/img.jpg`, frame);
        if(frame != null)
            resolve('resolve');
        else
            reject('Problem While reading');
    });
}
eventEmitter.on('read',function(string){
    console.log('event call');
    var promise = process();
    console.log(promise);
    promise.then(function(string){
        console.log(string);
        const image = fr.loadImage(`${__dirname}/buffer/img.jpg`);
        const faceRectangles = detector.locateFaces(image);
        console.log(faceRectangles);
        win.setImage(image);
        // fr.hitEnterToContinue();
        eventEmitter.emit('read','abcd');
    }).catch(function(err){
        console.log(err);
    });
});
eventEmitter.emit('read','abcd');

更改:1)从eventEmitter.emit('read','abcd'); 2中删除while循环)在promise.then()中递归地发出事件--我观察到,在连续发射事件时,promise.then()不能工作,所以我在promise.then()中发出事件,所以现在它很好地工作。

票数 0
EN

Stack Overflow用户

发布于 2018-12-06 09:14:17

由于您正在使用eventEmitter,所以您的代码应该如下所示:

代码语言:javascript
复制
const fr = require('face-recognition');
const cv = require('opencv4nodejs');
const events = require('events');
const Promise = require('bluebird');

const detector = fr.FaceDetector()
const cap = new cv.VideoCapture(0);
const win = new fr.ImageWindow()
const eventEmitter = new events.EventEmitter();

function process(){
    console.log('process');
    return new Promise(function(resolve,reject) {
        console.log('promise');
        var frame = cap.read();
        cv.imwrite(`${__dirname}/buffer/img.jpg`, frame);
        if(frame != null)
            resolve();
        else
            reject('Problem While reading');
    });
}
eventEmitter.on('read',function(string){
    console.log('event call');
    var promise = process();
    promise.then(function(string){
        console.log(string);
        const image = fr.loadImage(`${__dirname}/buffer/img.jpg`);
        const faceRectangles = detector.locateFaces(image);
        win.setImage(image);
        fr.hitEnterToContinue();
    }).catch(function(err){
        console.log(err);
    });
});
while(true){
    console.log('emit');
    eventEmitter.emit('read','abcd');
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53589876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档