两个匿名函数之间的简单“然后”承诺

时间:2019-12-05 14:33:00

标签: javascript

我有两个要连续执行的匿名函数。我该如何兑现承诺?

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

1 个答案:

答案 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()