Javascript-如何等待结果

时间:2018-08-10 14:43:07

标签: javascript jquery

问题末尾的解决方案

我想展示一个确认模式,询问用户是否真的想做某事,并根据结果将继续执行代码。

我正在阅读此文档的“确认,警报和错误消息”部分以执行此操作:Link to the DOC

如果要测试,可以找到herehere的.js和.css文件

但是,在我的代码的这一部分中,我必须在显示确认模式之前检查变量是否为TRUE:

if (verifyPermission === true){    
        FLUIGC.message.confirm({
            message: "Would you like to allow this?",
            title: 'Without permission',
            labelYes: 'Yes',
            labelNo: 'No'
            }, function (result, el, ev) {                   
                if (!result) {
                    return; //Not allowed, so here must cancel the execution
                }
            }
        });
        //I want to the application stops here until the user confirm
}

//The rest of code is here below

我想如果verifyPermission是真实的,将要求您进行确认。如果用户回答“否”,则该代码必须停止运行。

但是,正在发生的事情是它显示的确认问题,但是其余代码正在执行而无需等待确认。

我无法将其余代码放在function(result, el, ev)内,因为它包含很多代码,我认为它将具有代码复制功能。而且我不知道将其余代码放入函数中是否会是一个好习惯。

请,您能告诉我是否有正确的方法吗?

解决方案-使用JAVASCRIPT异步功能

我在检查verifyPermission的函数前加上了“异步”一词。 我留下了这样的代码:

async function myFunc() {
    if (verifyPermission === true){    
            var result = await confirmPermission();                
            if(!result){
                    return;
            }
    }
    // rest of code here
}

我创建了这个函数:

function confirmPermission(){

        return new Promise(resolve => {
            FLUIGC.message.confirm({
                message: "Would you like to allow this?",
                title: 'Without Permission',
                labelYes: 'Yes',
                labelNo: 'No'
            }, function (result, el, ev) {            
                resolve(result);
            });
        }); 
    }

2 个答案:

答案 0 :(得分:0)

将代码放入回调中。

if (verifyPermission === true){    
    FLUIGC.message.confirm({
        message: "Would you like to allow this?",
        title: 'Without permission',
        labelYes: 'Yes',
        labelNo: 'No'
        }, function (result, el, ev) {                   
               if (!result) {
                   return; //Not allowed, so here must cancel the execution
               else{
                //your code here
               }
            }
        }
    });
}

答案 1 :(得分:0)

async放在函数之前,并做一个Promise链之类的东西。这样可以确保代码按顺序运行。

来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

编辑:我实际上对此不太熟悉,因此最好阅读源代码并仔细阅读。