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

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

09-19 16:59