暂停一个函数并等待另一个函数执行

时间:2014-03-15 08:18:07

标签: javascript function wait

这是我的场景,我有三个功能

第一个是main函数,这也调用第二个函数来检索值。

这是第一个电话

this.markdownarea.on("click", "a[data-markdownarea-act]", function(){

//now open a modal window where user will upload a image and get a link
$("#modal-imgupload-content, #modal-bg-imgupload").toggleClass("active");

// now we need the url, so we call the second function to fetch it
var img_up_url = get_img_link();

if(img_up_url){
// now do some thing crazy here ...
}
});

我在第一个函数(上面)中添加了注释,因此它应该解释这个脚本会做什么。

现在是第二个功能:

function get_img_link() {
// pause this function immediately and let the user runs the third function 
//manually so the value will assign to val and then resume it.
alert(val);
return val;
}

第三个功能仅在用户单击提交按钮时才有效。在第三个函数执行后,它定义了第二个函数中需要的val变量的值。

function get_img_url(){

//now when the user click the submit this will get the value of the input field
var e = document.getElementsByName('link_img_up')[0];
val = e.value;
//okay now the value is assigned and the second function should resume 
}

问题是,当用户运行第一个函数时,模态窗口打开,用户可以获取一个值,然后单击提交按钮,该按钮将运行第三个函数并为val分配值,第二个选项应该是现在恢复,但不是立即执行第二个返回undefined variable val

所以我希望第二个函数暂停,直到用户运行第三个函数并为val分配值

我无法找到一种方法来做到这一点!有没有更好的

3 个答案:

答案 0 :(得分:0)

由于您只是返回get_img_link()中的值,请删除该功能

并修改您的get_img_url()以返回值。

function get_img_url(){

//now when the user click the submit this will get the value of the input field
var e = document.getElementsByName('link_img_up')[0];
val = e.value; 
return val;
//okay now the value is assigned and the second function should resume 
}

答案 1 :(得分:0)

你不得不将想要暂停的动作分成两部分,我很害怕。

创建一个对象,使用对用户完成选择后要执行的操作的回调进行初始化。为该对象提供一个应该在交互式部件完成后调用的方法。将对象传递给交互方法。

mySelection = $(...);

// now we need the url, so we call the second function to fetch it
get_img_link( function ( img_up_url ) {
  if( img_up_url ) {
    // now do some thing crazy here ...
    mySelection.doSomethingWithImageUpUrl(...)
  } 
});

第二个对话框获取img_up_url,然后调用回调函数,该函数在其闭包中具有初始选择。就个人而言,更喜欢使用MVCish方法而不是与DOM元素绑定的回调级联。

答案 2 :(得分:0)

我认为您首先需要用户输入然后执行其余代码,这是您可能要寻找的内容:

对于用户输入的模态窗口,我们首先要调用它来分配值,然后执行其余的代码,

$("#modal-imgupload_on").click(function () {
        function lol(){
        $("#modal-imgupload-content, #modal-bg-imgupload").toggleClass("active");
        }
        lol();
        });

现在我们想要执行剩下的代码而不是暂停。

            $("#img_up_sub").click(function () {
            var e = document.getElementsByName('link_img_up')[0];
            val = e.value;
            var img_up_url = val;
            if(img_up_url){
            var img_edit_process = function(editor){
            //do something crazy here
            };

             //want some function to execute after .....

            }
            $("#modal-imgupload-content, #modal-bg-imgupload").toggleClass("active");
            //now close the modal and reset all the value
        });

希望这有助于:)