我有两个要连续执行的匿名函数。我怎样才能兑现承诺?
在此简化示例中,需要连续执行的两个函数是“ saveAs”匿名函数内部的“ renameReport”和“ saveReport”。
“ 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 = function () {
console.log('renameReport')
return new Promise( function (resolve, reject) {
window.setTimeout(function () {
console.log('renameReport timeout')
resolve('hello')
}, 2000)
})
}
var saveReport = function (data) {
console.log('saveReport', data)
}
var saveAs = function () {
renameReport().then(saveReport);
}
saveAs()