【问题标题】:Alternative way to create a promise with q使用 q 创建承诺的替代方法
【发布时间】:2014-12-19 07:56:02
【问题描述】:

我知道如何在 Kris Kowal 的 q 中使用 var defer = Q.defer(); 创建承诺,调用 defer.resolve(); 和/或 defer.reject() 并返回 defer.promise。但是阅读docs,似乎有另一种方法可以创建一个承诺......

来自文档:

Q.Promise(解析器)

同步调用resolver(resolve, reject, notify) 和 返回一个promise,其状态由传递给的函数控制 解析器。这是一个替代的 Promise-creation API,它具有 与延迟概念相同的权力,但没有引入另一个 概念实体。

如果resolver抛出异常,返回的promise将被拒绝 将抛出的异常作为拒绝原因。

这是我尝试过的:

function () {
    return Q.Promise(function (resolve, reject) {
       (...do something...)
       resolve(5); // or: reject(error);
    });
}

但这并没有按预期工作! 谁能举个例子,如何使用Q.Promise?

更新: 感谢您的投票!我要了一个用法示例,因此一个简单的“你以正确的方式使用它”更有帮助!顺便说一句:它静默失败,是的,我附加了一个错误处理程序!

函数未命名的原因是我将它与 map 和 reduce 一起使用以创建延迟的承诺链,但似乎 resolver 函数永远不会称为...因此我要求(再次)用法示例...

【问题讨论】:

  • 如何它不起作用?你得到什么错误?你用的是什么版本的 Q?
  • “这不能按预期工作”。我们是不是要猜测你出了什么问题?
  • 你没有命名你的函数,你的JS语法不正确。

标签: javascript node.js promise q


【解决方案1】:

看看你的 2 个例子,我猜你正在这样做:

var q = require('q');

因此Q.Promise 将不起作用,而q.Promise 将起作用。

【讨论】:

  • 文档建议var Q = require('q') 和Q.Promise()。在我的代码中,我使用小写的 q 和 q.Promise()。但是这样的错误并不是要问的真正理由...
猜你喜欢
  • 1970-01-01
  • 2015-04-08
  • 2015-02-25
  • 2015-05-12
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-25
相关资源
最近更新 更多