【问题标题】:Not quite understanding the Q promise library不太了解 Q Promise 库
【发布时间】:2014-02-25 05:28:52
【问题描述】:

我在这里查看 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 来做到这一点?

【问题讨论】:

    标签: node.js callback promise


    【解决方案1】:

    Q 库与 Promise 一起工作 - 当 Promise 成功完成时,resolved,失败时 rejected

    在您向我们展示的代码中,您可以让generateToken 返回一个令牌的承诺,或者在您的客户端代码中将其视为一个承诺。两者都可以通过 Q 轻松实现。

    从异步任务返回一个承诺

    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 视为承诺

    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 阅读,您可能会意识到其他实现相同目标的方法。我只列出了一些我知道会起作用的。

    希望对你有所帮助。

    【讨论】:

    • 是的,但我在示例中收到此错误:Q.nfcall.(generateToken).then(function(token) { SyntaxError: Unexpected token (
    • CMD 中的箭头指向 Q.nfcall.(HERE) 作为错误点
    • nvm 修复了它,Q.fcall 而不是 nfcall
    • @IvanRistic 我很高兴它有帮助:)
    猜你喜欢
    • 2016-01-16
    • 2013-09-26
    • 2023-03-17
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    • 1970-01-01
    相关资源
    最近更新 更多