gpt4 book ai didi

javascript - Node q promise 递归

转载 作者:行者123 更新时间:2023-11-29 22:04:07 25 4
gpt4 key购买 nike

我有一个返回随机学生的异步函数。现在我想要一个返回两个独特学生的函数——我的问题的根源。

    getTwoRandom = function(req) {
var deferred = Q.defer();

Q.all([
Student.getRandom(req),
Student.getRandom(req)
])
.then(function(students){
if(students[0]._id !== students[1]._id) { //check unique
deferred.resolve(students);
} else {
//students are the same so try again... this breaks
return getTwoRandom(req);
}
});

return deferred.promise;
};

然后再往下我有这样的东西:

getTwoRandom(req).then(function(students) {
//do what I want...
});

问题是当我执行 return getTwoRandom(req);.then() 函数没有触发...这是返回一个不同的 promise 吗.then() 没有使用?

最佳答案

你把它复杂化了很多:)

你也可以这样做:

getTwoRandom = function(req) {
return Q.all([
Student.getRandom(req),
Student.getRandom(req)
]).then(function(students) {
if(students[0]._id !== students[1]._id) {
return students;
} else {
return getTwoRandom(req);
}
});
};

现在,为什么这行得通? Q.all 的结果总是一个新的 promise(不需要创建一个新的 deferred)。无论您返回什么值(例如 students),都将包含在这个新的 promise 中。相反,如果返回一个实际的 promise (如 getTwoRandom(req)),那么该 promise 将被返回。这听起来像你想做的。

关于javascript - Node q promise 递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21945994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com