Javascript 嵌套的then()函数甚至在嵌套的then()函数完成之前就返回承诺
我有两个函数,它们应该一个接一个地调用,如下所示Javascript 嵌套的then()函数甚至在嵌套的then()函数完成之前就返回承诺,javascript,jquery,Javascript,Jquery,我有两个函数,它们应该一个接一个地调用,如下所示 MainFunc().then(DrawChart()); MainFunc()函数内部有我在下面提到的嵌套函数 我希望MainFuc()返回promise,或者在createMultiBatchDropdown()完成后调用DrawChart()函数 我查看了一些链接: 但我不想使用任何设置的超时或延迟功能 我对then()和promise()函数的概念不太熟悉。如有任何帮助,将不胜感激 function MainFunc(){ var
MainFunc().then(DrawChart());
MainFunc()函数内部有我在下面提到的嵌套函数
我希望MainFuc()返回promise,或者在createMultiBatchDropdown()完成后调用DrawChart()函数
我查看了一些链接:
但我不想使用任何设置的超时或延迟功能
我对then()和promise()函数的概念不太熟悉。如有任何帮助,将不胜感激
function MainFunc(){
var r = $.Deferred();
var xhr = BatchTypeFilterList(data,id).then(function(res){
//Logic goes here
var impactXhr = GetImpactData(id).then(function(result){
var DropXhr = createMultiBatchDropdown('ImpactBatchSearch',result)
})
})
return r.promise(xhr);
}
function BatchTypeFilterList(){
var deferred = $.Deferred();
var xhr = $.ajax({
//Ajax Call
success:function(result){
deferred.resolve(result);
}
})
return deferred.promise(xhr);
}
function GetImpactData(){
var deferred = $.Deferred();
var xhr = $.ajax({
//Ajax Call
success:function(result){
deferred.resolve(result);
}
})
return deferred.promise(xhr);
}
function createMultiBatchDropdown(){
var batchDropDownDeferred = $.Deferred();
//No ajax call normal jquery logic to form dropdown
batchDropDownDeferred.resolve(data);
return batchDropDownDeferred.promise(xhr);
}
GetImpactData
返回一个Promise
,但它没有与外部xhr
链接,这意味着调用MainFunc
将导致Promise
在调用createMultiBatchDropdown
之前解析。相反,返回由createMultiBatchDropdown
创建的Promise
,以便它与整个Promise链正确链接。您还需要返回impactXhr
以完成链。改为:
var xhr = BatchTypeFilterList(data, id).then(function(res) {
//Logic goes here
var impactXhr = GetImpactData(id).then(function(result) {
return createMultiBatchDropdown('ImpactBatchSearch', result);
})
return impactXhr;
})
可能重复的是,在执行GetImpactData()函数时,它不工作,这意味着一旦ajax成功调用DrawChart(),然后调用createMultiBatchDropdown()