我在这里查看 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/