Coffeescript 问题:蓝鸟延迟解决方案
我正在将coffeeScript代码从Q迁移到Bluebird,看起来我使用的promises都是错误的,因为Bluebird的文档显然不鼓励使用Promise.defer 带有Q的my client server的简化版本如下: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 () ->
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