node.js - 不太了解 Q Promise 库

标签 node.js callback promise

我在这里查看 Q 库:https://github.com/kriskowal/q

这就是我编写带有回调的函数的方式:

function token(callback) {
    require('crypto').randomBytes(34, function(ex, buf) {
        var token = buf.toString('hex');
        callback(token);
    })
}
exports.generateToken = token;

然后我会:

require('../models/security').generateToken(function (token) {
    console.log("here " + token)
})

我如何使用 .then 来做到这一点?

最佳答案

Q 库与 Promise 配合使用 - 当 Promise 成功完成时,它们得到解决;当它们失败时,被拒绝

在您向我们展示的代码中,您可以使 generateToken 返回 token 的 Promise,或将其视为客户端代码中的 Promise。两者都可以通过 Q 轻松实现。

从异步任务返回 promise

function token() {
    var deferred = Q.defer();
    require('crypto').randomBytes(34, function(ex, buf) {
        // reject it if there was an exception!
        if (ex) { return deferred.reject(ex); }

        // resolve it with the correct string value
        var token = buf.toString('hex');
        deferred.resolve(token);
    });
    return deferred.promise;
}

generateToken 视为 promise

var generateToken = require('../models/security').generateToken;

var deferred = Q.defer();
generateToken(deferred.makeNodeResolver());
deferred.promise.then(function() {
    console.log("here " + token);
});

// same as above, but with less code
Q.nfcall(generateToken).then(function(token) {
    console.log("here " + token);
});

通读Q docs您可能会意识到其他方法可以达到同样的目的。我只列出了一些我知道可行的方法。

希望对您有所帮助。

关于node.js - 不太了解 Q Promise 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21999148/

相关文章:

node.js - 调试Reaction-基于Meteor的Commerce网上商店

javascript - meteor js未渲染的钩子(Hook)?

C++ for_each 调用回调函数 vector 并向每个回调函数传递一个参数

javascript - 如何强制javascript不使回调函数并行?

javascript - 在测试中执行函数 n 次并检查 jasmine 异步代码中的每个结果的智能方法

javascript - 如何检索 HTTP 响应错误的详细信息

node.js - 无法加载 c++ bson 扩展,使用纯 JS 版本——没有 Mongoose ,没有 express ,只有 Node 驱动程序

javascript - div 内的单选按钮

javascript - 如果1分钟内未收到响应(NodeJ),如何返回错误

javascript - JavaScript Promises 解决了哪些编程障碍?或者说它们到底是什么?