我想在我的代码中等待,直到两个值相同。为此,我使用

    await new Promise((resolve, reject) => {
        if(curCount == maxTests) resolve;
    });


但我认为,这仅被称为一次。如果两个值都相同,我如何使承诺得到解决?如何避免它永远不会发送解决方案?

更新:
一些要求麻烦的功能。这是整个功能,没有子功能。该函数将填充q队列以完全填充测试同步。问题是req.body.selection.forEach立即返回,但我要等到整个队列准备就绪。所以我的想法是在末尾添加一个承诺,然后点击,直到current和max相同为止。

router.post('/imgtest', async (req, res) => {

    console.log('Start Image Test');

    //Er kommt an.
    req.setTimeout(5000000); // Nach Adam Riese 83 Minuten.
    process.setMaxListeners(0);

    io = req.app.get('socketio');

    //Caluclate the max amounnt of tests
    const maxTests = req.body.selection.length * req.body.servers.length;
    var curCount = 0;


    //RETURN IF THIS IS READY. CURRENTLY IT RETURNS IMMEDIATLY
    req.body.selection.forEach(async function(entry) {

        //Jetzt erstmal die Domain aus der DB holen
        var dbUrl = await getUrl(entry);
        console.log('tapsi');

        var bildFormat = '';

        var arrQuestionmark = dbUrl.split('?');
        if(arrQuestionmark.length==2){
            if(arrQuestionmark[1].includes('&')){
                var arrAnd = arrQuestionmark[1].split('&');
                arrAnd.forEach(function(entry) {
                    if(entry.includes('format=')){
                        var arrFormat = entry.split('=');
                        bildFormat = arrFormat[1];

                    }
                });
            }
        }

        var masterName = uuidv1();
        const orgpath = path.resolve(__basedir, 'tests/downloads', masterName + '-.' + bildFormat);

        //Download the MAsterimage
        (async () => {

            await queue.add(() =>downloadImage(dbUrl, 'c11', req.body.domain,  bildFormat, orgpath) );

        })();

        req.body.servers.forEach(async function(xserver) {

            var fileName = masterName + '-' + xserver + '.' + bildFormat;

            const dpath = path.resolve(__basedir, 'tests/downloads', fileName);

            (async () => {
                await queue.add(() => downloadImage(dbUrl, xserver, req.body.domain, bildFormat, dpath));
                //console.log('Done ' + entry);
            })();

            (async () => {
                await queue.add(async() => startCompare(orgpath, dpath, 'null:').then(function(result) {
                    console.log(result);
                    curCount++;
                    messageIO(curCount,maxTests);
                }));
                //console.log('done compare ' + entry);
                //fs.unlinkSync(dpath);
            })();



        });


    });


    console.log('Need to wait');

    res.sendStatus(200);

});

最佳答案

您以为将只调用一次是正确的。一种解决方法是,在函数内通过setInterval创建循环-进行常规检查并解决是否为真并清除循环。

关于javascript - promise 条件相等,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59345251/

10-09 18:38