我有两个匿名函数要连续执行。我怎样才能做到承诺?
在这个简化的示例中,需要连续执行的两个函数是"renameReport"和"saveReport",位于"saveAs"匿名函数内。
">renameReport"和"saveReport"都使用jQuery来执行AJAX调用。简单地执行重命名报告并将报告保存在下一行是行不行的。
var renameReport = function () {
...
}
var saveReport= function () {
...
}
var saveAs = function () {
renameReport().then(saveReport()); //not working
};
这会导致错误:"类型错误: 重命名报告(...(未定义">
好吧,要使用承诺,您必须拥有承诺并返回它们,以便可以链接。因此,如果你有一个有承诺的函数,你可能不会返回这个承诺。
您也在调用该函数,而不是在 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()