堆叠4个功能调用在彼此之上

时间:2014-07-04 14:25:57

标签: javascript jquery html

长话短说,我希望能够连续执行4个功能并确保在第二个功能启动之前完成第一个功能等。如何以最佳方式解决这个问题?

这是合约。我有4个不同的<select>字段(连续堆叠在一起),即将填充任意数量的<option>标记。我有一个名为UpdateList(id)的函数,当我调用它时,它会进入数据库并根据我在之前的<select>中已经选择的内容打印出下一个值。现在我希望能够根据我在网址中提供的内容预先选择值。例如,如果我提供以下网址,我想预先选择1) <option> test :2 <option>test2 :3 <option>test3 :4 <option>test4.现在我假设这些值存在于数据库中。

example.com?to=test&tc=test2&te=test3&tet=test4

问题在于我打电话

UpdateList(t);  
UpdateList(v);
UpdateList(w);
UpdateList(z);

第一个函数在第二个函数开始之前没有完成,因此它不打印出id = v的第二个函数(因此也不是最后两个)。

如何以最佳方式解决这个问题?我曾经想过类似的东西,但它并没有起作用。

  UpdateList(t); 
    setTimeout(function(){
    UpdateList(v);
    setTimeout(function(){
    UpdateList(w);
    setTimeout(function(){
    UpdateList(z);
    },100);  
    },110);  
    },120);



<select id="u" onchange="UpdateList(this.id);"></select><option><!-PHP rendered options goes here->
<select id="v" onchange="UpdateList(this.id);"></select>!-PHP rendered options goes here->
<select id="w" onchange="UpdateList(this.id);"></select>!-PHP rendered options goes here->
<select id="z" onchange="UpdateList(this.id);"></select>!-PHP rendered options goes here->

对不起,如果未指明问题=)。

1 个答案:

答案 0 :(得分:1)

使用承诺库,例如q https://github.com/kriskowal/q

以下是q文档的摘录:

在第一次通过时,承诺可以缓解“毁灭金字塔”:代码向右前进的速度比前进的速度快。

step1(function (value1) {
    step2(value1, function(value2) {
        step3(value2, function(value3) {
            step4(value3, function(value4) {
                // Do something with value4
            });
        });
    });
});

使用promise库,您可以展平金字塔。

Q.fcall(promisedStep1)
.then(promisedStep2)
.then(promisedStep3)
.then(promisedStep4)
.then(function (value4) {
    // Do something with value4
})
.catch(function (error) {
// Handle any error from all above steps }) .done();