Coffeescript 问题:蓝鸟延迟解决方案

Coffeescript 问题:蓝鸟延迟解决方案,coffeescript,bluebird,Coffeescript,Bluebird,我正在将coffeeScript代码从Q迁移到Bluebird,看起来我使用的promises都是错误的,因为Bluebird的文档显然不鼓励使用Promise.defer 带有Q的my client server的简化版本如下: Q = require 'q' handleRequest = (msg) -> console.log "Server received #{msg} \n" deferred = Q.defer() setTimeout () ->

我正在将coffeeScript代码从Q迁移到Bluebird,看起来我使用的promises都是错误的,因为Bluebird的文档显然不鼓励使用Promise.defer

带有Q的my client server的简化版本如下:

Q = require 'q'

handleRequest = (msg) ->
  console.log "Server received #{msg} \n"

  deferred = Q.defer()

  setTimeout () ->
    deferred.resolve "bar"
  , 2000

  deferred.promise

handleRequest "foo"
.then (msg) ->
  console.log msg
基本上我有一个函数,它承诺在2秒后异步解析

在Bluebird中尝试相同的方法时,我得到一个类型错误,表示对象函数Promise(解析器)没有“then”方法(整个错误代码在本文末尾)

我不知道我在哪里搞砸了,因为Bluebird创建一个函数的文档似乎只是一个带有resolve/reject函数的函数

在没有使用promisify的情况下,我无法找到任何类似的承诺创建方法

EventEmitter可以做到这一点,但我真的需要在大版本中使用承诺。 使用相同流的还有一些其他代码位:一个函数,其中创建/返回延迟,并在某个阶段解析/拒绝延迟

提前非常感谢!!!:) 我整个上午都在为这件事挣扎

Server received foo 

TypeError: Object function Promise(resolver) {
    if (typeof resolver !== "function") {
        throw new TypeError("the promise constructor requires a resolver function");
    }
    if (this.constructor !== Promise) {
        throw new TypeError("the promise constructor cannot be invoked directly");
    }
    this._bitField = 0;
    this._fulfillmentHandler0 = void 0;
    this._rejectionHandler0 = void 0;
    this._promise0 = void 0;
    this._receiver0 = void 0;
    this._settledValue = void 0;
    this._boundTo = void 0;
    if (resolver !== INTERNAL) this._resolveFromResolver(resolver);
} has no method 'then'

通过谷歌搜索错误,我找到了一页蓝鸟的文档。 因此,我理解代码的异步部分是承诺本身的解决方案,因此如下所示重写代码可以解决此问题:

Promise = require 'bluebird'

handleRequest = (msg) ->
  new Promise (resolve) ->
    setTimeout () ->
      resolve "bar"
    , 2000

handleRequest "foo"
.then (msg) ->
  console.log msg 

对于那些正在寻找实际
Q.defer
等价物的人,请参阅
Promise = require 'bluebird'

handleRequest = (msg) ->
  new Promise (resolve) ->
    setTimeout () ->
      resolve "bar"
    , 2000

handleRequest "foo"
.then (msg) ->
  console.log msg