【问题标题】:Convert promise to synchronous function将 Promise 转换为同步函数
【发布时间】:2015-10-15 17:47:28
【问题描述】:

如果我在addTwo 下方有一个像这样的简单函数,我可以使用bluebird 的Promise.method(addTwo) 来实现它,即使它不执行任何异步操作。有什么办法可以反其道而行之?

function addTwo(num){
  return num + 2
}

var newValue = addTwo(2) // => 4

addTwoPromise = Promise.method(addTwo)

addTwoPromise(2).then(function(newValue){
  console.log(newValue) // == 4
})

有什么方法可以将addTwoPromise 从一个承诺再次转换为一个同步函数?我对 async / await 了如指掌,但我并不在寻找答案。

【问题讨论】:

  • 意味着您正在寻找一种方法来让addTwo 脱离addTwoPromise?看起来没有办法做到这一点。你想用这个来达到什么目的?
  • 如果你有一个同步方法,你为什么要把它包装在一个promise中?
  • @StephenCleary 作为标准化函数的方法stackoverflow.com/questions/31621040/…
  • @MattDiamant 我正在传递一个函数并应用它们/共享参数。
  • @MattDiamant 如果您有时间或耐心。 gist.github.com/reggi/40a6aa3960ad73f92927

标签: javascript promise bluebird


【解决方案1】:

是的,您可以使用 Promise.setScheduler 来明确违反 Promises/a+ 规范并强制 bluebird 同步运行 then 回调。

请不要,因为它只适用于无论如何都是同步的函数(它不应该从一开始就返回 Promise),并且它会产生一个地狱般的竞争条件。

【讨论】:

    猜你喜欢
    • 2017-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    • 2012-07-25
    • 1970-01-01
    • 2021-09-21
    相关资源
    最近更新 更多