【问题标题】:using bluebird with undefined success callback function使用带有未定义成功回调函数的蓝鸟
【发布时间】:2016-02-01 19:05:43
【问题描述】:

我正在使用 bluebird 库而不是 memcached

memcached.set('foo', 'bar', 10, function (err) { /* stuff */ });

此函数不会在第二个参数中调用成功回调,因此似乎 .then(res) 函数没有被调用。

 Promise.promisifyAll(memcached);
 memcached.setAsync(hashedCacheKey, obj).then(function (res) {
            resolve(res);
        }).catch(function (err) {
            reject(err, null);
        });

我有什么方法可以处理未调用的成功事件吗?

【问题讨论】:

  • @raina77ow 它是在“Promise.promisifyAll(memcached);”之后生成的我编辑了我的帖子。
  • 旁注,看起来您可能不必要地将逻辑包装在 new Promise 构造函数中。
  • @Retsam 我正在返回新的承诺,因为调用函数也使用 then/catch 签名。
  • @Teomanshipahi 听起来您正在使用 Promise 构造函数反模式。你真的应该直接返回memcached.setAsync 的承诺。见here
  • @Retsam 一个问题有两个答案!感谢您指出这一点,我改变了您建议的方式,现在更清楚了。谢谢!

标签: javascript node.js promise memcached bluebird


【解决方案1】:

这里的主要问题是您没有为memcached.setAsync 提供超时参数,但它是memcached.set 的强制参数。这两行是等价的:

memcached.set("foo", "bar", () => { /* this is never called */ });
memcached.setAsync("foo", "bar").then(() => { /* this is never called, either */ })

添加一个超时参数,您的代码应该可以按预期工作。

【讨论】:

    猜你喜欢
    • 2017-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 2023-03-08
    • 2015-08-28
    • 2011-11-15
    • 1970-01-01
    相关资源
    最近更新 更多