2014-03-04 60 views
1

我想要做三个jQuery帖子,设置他们的结果等于一个变量超出他们的范围,然后三个都返回后,如果他们成功,执行另一个功能。现在我正在做嵌套回调,如果可能的话,我想离开。

我看着jQuery的承诺和deferreds的文件,但还没有想出如何使用它以$。员额功能

我当前的代码:

var workout, diet, feedback 
var postobj = { id: workoutId }; 
$.post("./RowingWorkouts/GetWorkoutUsingId", postobj, function(result) { 
    workout = result; 
    $.post("./Diet/GetDietUsingId", postobj, function(result) { 
     diet = result; 
     $.post("./RowingWorkouts/GetWorkoutFeedback", postobj, function(result) { 
      feedback = result; 
      renderCharts(workout, diet, feedback); 
     }); 
    }); 
}); 

我想做(伪代码-ISH):

var workout, diet, feedback 
var postobj = { id: workoutId }; 
var getWorkout = $.post("./RowingWorkouts/GetWorkoutUsingId", postobj, function(result) { 
    workout = result; 
}); 
var getDiet = $.post("./Diet/GetDietUsingId", postobj, function(result) { 
    diet = result; 
}); 
var getFeedback = $.post("./RowingWorkouts/GetWorkoutFeedback", postobj, function(result) { 
    feedback = result; 
}); 
// When all three are successful - I haven't gotten the when syntax to actually work yet 
$.when(All3AreSuccessful).doThisOrSomething(renderCharts(workout, diet, feedback)); 

如果有一个更优雅的方式做到这一点,我很高兴切换了我的代码了。我想要使​​用promises,现在就推迟了,因为尽管这段代码很简单,并且使用嵌套回调很容易理解,但我宁愿学习一种新工具,并且尽快切换开关。

+0

使用'Q'库(https://github.com/kriskowal/q)作为承诺。 – Lekhnath

+0

谢谢,看起来很酷,但我试图只使用jQuery和jQuery UI库。 –

回答

4

:此处显示

$.when(getWorkout, getDiet, getFeedback).done(function() { 
    renderCharts(workout, diet, feedback); 
}) 

例子

var postobj = { 
    id: workoutId 
}; 
var getWorkout = $.post("./RowingWorkouts/GetWorkoutUsingId", postobj); 
var getDiet = $.post("./Diet/GetDietUsingId", postobj); 
var getFeedback = $.post("./RowingWorkouts/GetWorkoutFeedback", postobj); 
// When all three are successful - I haven't gotten the when syntax to actually work yet 
$.when(getWorkout, getDiet, getFeedback).done(function (workout, diet, feedback) { 
    //each of the parameter is an array 
    renderCharts(workout[0], diet[0], feedback[0]) 
});