【问题标题】:perform unique actions by file after a promise resolves承诺解决后按文件执行唯一操作
【发布时间】:2021-03-15 22:59:13
【问题描述】:

在 Vue 项目中,有一段代码在多个文件中重复出现,我试图将其重构为辅助函数,以便需要它的文件共享。所述代码块的目的是根据 API 承诺的结果在 UI 中显示祝酒词。问题是,在显示 toast 之后,不同的文件必须执行特定于该文件的操作。例如,一个文件必须刷新数据,而另一个文件必须关闭模式表单。这意味着在调用后续命令之前等待显示 toast 的公共代码完成。这就是我卡住的地方。

这个简化的代码在更大的项目中复制了这个问题:

// simulate an API promise
const aPromise = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('promise resolved at ' + new Date().toLocaleString());
  }, 2000);
});

// get simulated API promise
const response = aPromise;

// --- this works ---
const generateResponseFeedback = response
    .then((msg) => {console.log(msg)})
    .then(() => {console.log('second message ' + new Date().toLocaleString())});

const response2 = generateResponseFeedback.then(() => { console.log('last message abc ' + new Date().toLocaleString())});

// --- this does not work ---
const sharedGenerateResponseFeedback = (response) => {
    response.then((msg) => {console.log(msg)})
    .then(() => {console.log('second message ' + new Date().toLocaleString())});
}

sharedGenerateResponseFeedback(response).then(() => { console.log('last message xyz ' + new Date().toLocaleString())});

控制台显示如下 -

我不明白为什么它说sharedGenerateResponseFeedback(...) 未定义。为什么它不能识别那个函数名?

【问题讨论】:

    标签: javascript promise


    【解决方案1】:

    你需要返回sharedGenerateResponseFeedback中的promise。

    const sharedGenerateResponseFeedback = (response) => {
        return response.then((msg) => {console.log(msg)})
        .then(() => {console.log('second message ' + new Date().toLocaleString())});
    }
    

    【讨论】:

      猜你喜欢
      • 2016-01-10
      • 2020-12-23
      • 2021-07-20
      • 2021-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-05
      相关资源
      最近更新 更多