我有2个函数,它们应该一个接一个地调用,如下所示。
MainFunc().then(DrawChart());
MainFunc()函数内部具有嵌套函数,如下所述。
我希望MainFuc()返回promise或以其他方式在createMultiBatchDropdown()完成后调用DrawChart()函数。
我检查了一些链接:Nesting asynchronous jquery promises 但是我不想使用任何设置的超时或延迟功能。
我对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);
}
答案 0 :(得分:0)
GetImpactData
返回一个Promise
,但它没有与外部xhr
链接,这意味着调用MainFunc
将导致Promise
解析< em>之前 createMultiBatchDropdown
已被调用。而是return
Promise
创建的createMultiBatchDropdown
,以便它与整个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;
})