不太了解Q promise库

时间:2014-02-24 21:14:42

标签: 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?

执行此操作

1 个答案:

答案 0 :(得分:2)

Q库与promises一起使用 - 承诺在成功完成后已解决,或在失败时拒绝

在您向我们展示的代码中,您可以让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阅读,你可能会意识到其他方法可以实现同样的目标。我只列出了一些我知道会工作的。

我希望它有所帮助。