用q创造承诺的另一种方式

Alternative way to create a promise with q

本文关键字:另一种 方式 承诺 创造      更新时间:2023-09-26

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

来自文档:

Q.Promise(解析器)

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

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

这就是我尝试过的:

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

但这并没有像预期的那样奏效!有人能举一个例子,如何使用Q.Promise

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

该函数未命名的原因是,我将其与mapreduce一起使用,以创建一个延迟的承诺链,但似乎从未调用解析器函数。。。因此,我(再次)要求提供一个用法示例。。。

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

var q = require('q');

因此Q.Promise不会起作用,但q.Promise会起作用。