彼此执行三个功能

时间:2018-02-07 08:52:04

标签: javascript jquery asynchronous

我有三个我希望彼此执行的功能。顺序很重要,因为func2依赖于func1的数据和func2的func3。到目前为止我一直在使用回调。我想使用jQuery.when()。then()。done()。我无法理解那里的教程。一些主题使用result = result & mask; 和其他人不。我不想使用超时。因为我现在不总是执行函数所花费的确切时间。如果有人能告诉我它是如何用jQuery完成的,我将非常感激。

  

修改

这就是我现在正在做的事情。但是,当有很多函数需要按顺序执行时,我希望将我的知识发展为使用更好或更易于管理的东西。

var def = jQuery.Deferred();

3 个答案:

答案 0 :(得分:1)

如果要处理异步代码,则应使用promises:

class MainWindow
{
    List<Landen> landenList;
    public MainWindow()
    {
        InitializeComponent();
        this.landenList = new LandenStedenTalenEntities();
        landenListBox.ItemsSource = (from Landen in this.landenList select Landen.Naam).ToList();
    }
}

编辑1 - 将承诺放在函数

答案 1 :(得分:1)

jQuery&#39; then()是Javascript中Promises的自定义实现。我建议使用大多数现代浏览器支持的本机版本。您想要实现的目标可以通过两种不同的方式实现:

使用Promise.defer()(已弃用):

function first() {
    var deferred = Promise.defer();
    doSomethingAsynchronously(function (result) {
        if (result.success)
            deferred.resolve(result.data);
        else
            deferred.reject(result.error);
    });
    return deferred.promise;
}

使用new Promise(function(resolve, reject) {})

function second(someData) {
    return new Promise(function(resolve, reject) {
        doSomethingElseAsynchronously(someData, function (result) {
            if (result.success)
                resolve(result.data);
            else
                reject(result.error);
        });
    })
}

在这两种情况下,您都可以这样做:

first().then(function(data) {
    return second(data)
}).then(function(data) {
    return third(data);
}).catch(function(error) {
    console.error(error);
});

现在这是本机Javascript Promises。 jQuery的承诺可能略有不同,但我认为理解上面关于本机Promises的解释将有助于你理解有关jQuery实现的教程。

答案 2 :(得分:0)

您的要求很简单,可以像下面这样完成。为什么要让它复杂化。

function function1(){
  //On completion
  function2(data);
}
function function2(data){
 //On completion 
  function3(newdata);
}
function function3(nedata){
 //Function 3 code here
}