两个匿名函数之间的简单"then"承诺



我有两个匿名函数要连续执行。我怎样才能做到承诺?

在这个简化的示例中,需要连续执行的两个函数是"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()

相关内容

最新更新