Javascript 简单的;然后";两个匿名函数之间的承诺

Javascript 简单的;然后";两个匿名函数之间的承诺,javascript,Javascript,我想连续执行两个匿名函数。我怎么能承诺呢 在这个简化的示例中,需要连续执行的两个函数是“renameReport”和“saveReport”,它们位于“saveAs”匿名函数中 “renameReport”和“saveReport”都使用jQuery进行AJAX调用。仅仅在下一行执行renameReport和saveReport是不行的 var renameReport = function () { ... } var saveReport= function () { ..

我想连续执行两个匿名函数。我怎么能承诺呢

在这个简化的示例中,需要连续执行的两个函数是“renameReport”和“saveReport”,它们位于“saveAs”匿名函数中

“renameReport”和“saveReport”都使用jQuery进行AJAX调用。仅仅在下一行执行renameReport和saveReport是不行的

var renameReport = function () {
    ...
}

var saveReport= function () {
    ...
}

var saveAs = function () {
    renameReport().then(saveReport()); //not working
};

这会导致一个错误:“TypeError:renameReport(…)未定义”

要使用承诺,您必须有承诺并返回它们,以便链接。所以,如果你有一个函数有一个承诺,你可能不会返回这个承诺

您也在调用函数,而不是在then中引用它。添加
()
时,它会执行函数并将返回的内容分配给
,然后执行
。因此,请删除
()
,使其不被执行

基本的程序流程,你需要像这样

var renameReport=函数(){
console.log('renameReport')
返回新承诺(函数(解析、拒绝){
setTimeout(函数(){
console.log('renameReport timeout')
解决('你好')
}, 2000)
})
}
var saveReport=函数(数据){
console.log('saveReport',data)
}
var saveAs=函数(){
重命名报表()。然后(保存报表);
}

saveAs()
要使用承诺,您必须有承诺并返回它们,这样才能将其链接起来。所以,如果你有一个函数有一个承诺,你可能不会返回这个承诺

您也在调用函数,而不是在then中引用它。添加
()
时,它会执行函数并将返回的内容分配给
,然后执行
。因此,请删除
()
,使其不被执行

基本的程序流程,你需要像这样

var renameReport=函数(){
console.log('renameReport')
返回新承诺(函数(解析、拒绝){
setTimeout(函数(){
console.log('renameReport timeout')
解决('你好')
}, 2000)
})
}
var saveReport=函数(数据){
console.log('saveReport',data)
}
var saveAs=函数(){
重命名报表()。然后(保存报表);
}

saveAs()
您必须返回一个承诺才能调用
。然后
。我不确定您的代码是否已经是异步的,但如果不是,您不需要使用承诺-您只需连续调用每一个就可以了。什么是renameReport,saveReport返回的?这不太可能是确切的错误。它应该更像是
renameReport()。然后
是未定义的…而
saveReport()
是错误的。@Pierre然后您可以在之后调用save report。没有必要使您的代码异步。您必须返回一个能够调用
的承诺。然后
。我不确定您的代码是否已经是异步的,但如果不是,您不需要使用承诺-您只需连续调用每一个就可以了。什么是renameReport,saveReport返回的?这不太可能是确切的错误。它应该更像是
renameReport()。然后
是未定义的…而
saveReport()
是错误的。@Pierre然后您可以在之后调用save report。没有必要使您的代码异步。我很难理解承诺的语法,但我的项目的多个部分似乎在没有显式创建承诺的情况下使用承诺。不过我会试试你的解决方案。如果没有看到实际的代码,很难知道它是什么。可能很简单,就像某个东西返回承诺一样,您需要在函数调用中返回它才能使用它。在你的问题中,更好的示例代码会给出更好的答案。我很难理解承诺的语法,但是我的项目的多个部分似乎使用了承诺,而没有显式地创建它。不过我会试试你的解决方案。如果没有看到实际的代码,很难知道它是什么。可能很简单,就像某个东西返回承诺一样,您需要在函数调用中返回它才能使用它。问题中更好的示例代码会给出更好的答案。