我在这里查看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?
执行此操作答案 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阅读,你可能会意识到其他方法可以实现同样的目标。我只列出了一些我知道会工作的。
我希望它有所帮助。