我有两个要连续执行的匿名函数。我该如何兑现承诺?
在此简化示例中,需要连续执行的两个函数是匿名函数“ 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(...)未定义”
答案 0 :(得分:0)
使用承诺必须拥有承诺并将其返回,以便可以将其链接起来。因此,如果您确实有一个带有承诺的函数,则可能不会返回该承诺。
您还正在调用该函数,而在then中未对其进行引用。当您添加()
时,它将执行该函数并将返回的内容分配给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()