【发布时间】:2015-04-15 18:21:45
【问题描述】:
我已经阅读了很多关于 promisejs 的不同文章,但似乎无法让它适用于我的代码。我有异步代码可以工作并且可以满足我的需要,但是它很长而且看起来不像 promise 那样干净。
这是我一直在研究的两个链接:http://jabberwocky.eu/2013/02/15/promises-in-javascript-with-q/ 和 https://spring.io/understanding/javascript-promises。
mainCode.js
accountModel.findOne({username: body.username}, function(err, usernameFound) {
console.log("here");
if (err) {
console.log(err);
} else {
console.log("here1");
anotherClass.duplicateUsername(usernameFound, function(err, noerr) {
if (err) {
console.log("error");
res.status(409).send("username");
} else {
console.log("here2");
accountModel.findOne({email: body.email}, function(err, emailFound) {
if (err) {
console.log("error2");
} else {
console.log("here3");
console.log(emailFound);
}
});
}
});
}
});
// anotherclass.duplicateUsername
anotherClass.prototype.duplicateUsername = function(usernameFound, callback) {
if (usernameFound) {
callback(usernameFound);
} else {
callback();
}
}
当前的承诺代码(在 mainCode.js 中):
var promise = userModel.findOne({
username: body.username
}).exec();
promise.then(function(usernameFound) {
console.log("usernameFound")
return userCheck.duplicateUsername(usernameFound);
}).then(function(usernameFound) {
console.log("NOERR:" + usernameFound + ":NOERR");
console.log("noerror");
return;
}, function(error) {
console.log(err);
console.log("error");
res.sendStatus(409);
return;
});
当我运行我的 promise 代码时,它会转到 duplicateUsername,执行 callback(),但不会在 promise 代码中打印任何内容。
【问题讨论】:
-
看起来你需要承诺化
duplicateUsername。它还需要返回一个 Promise,而不是执行回调。 -
但是链接中的示例都没有吗?另外,我该怎么做呢?
-
您需要执行
q.resolve或q.reject,然后返回延迟的承诺,而不是执行回调。 -
类似this?
-
@user1883614:你在找stackoverflow.com/q/22519784/1048572吗?
标签: node.js asynchronous promise q