gpt4 book ai didi

node/redis : returning from inside callback? 中的 JavaScript 控制流

转载 作者:IT王子 更新时间:2023-10-29 05:59:59 26 4
gpt4 key购买 nike

新手问题。为什么这个 JavaScript 函数返回未定义?

var redis = require("redis"), client = redis.createClient();
function generatePageUrl() {
var randomStr = randomInt.toString(32);
// Check whether this URL is already in our database;
client.smembers("url:" + randomStr, function (err, data ) {
if (data.length != 0) {
// URL already in use, try again
return getPageUrl();
}
return randomStr;
});
}
var page_url = generatePageUrl();
// add it to the database, etc

我猜它一定是在到达 client.smembers 内部之前到达终点并返回。

但我真的需要在返回之前检查 Redis 集合的内容:我可以让它从回调内部返回吗?如果没有,我该怎么办?

此外,欢迎就我递归使用此函数的方式提出建议 - 我不确定它是否完全明智:)

感谢您帮助新人。

最佳答案

您不能从回调内部返回。这样做:

var redis = require("redis"), client = redis.createClient();
function generatePageUrl(cb) {
var randomStr = randomInt.toString(32);
// Check whether this URL is already in our database;
client.smembers("url:" + randomStr, function (err, data ) {
if (data.length != 0) {
// URL already in use, try again
getPageUrl(cb);
}
cb(randomStr);
});
}
generatePageUrl(function(page_url){
// add it to the database, etc
});

如果你不喜欢这种风格,可以考虑streamlinejs - 它使您能够像这样编写代码:

var redis = require("redis"), client = redis.createClient();
function generatePageUrl(_) {
var randomStr = randomInt.toString(32);
// Check whether this URL is already in our database;
var data = client.smembers("url:" + randomStr, _);
if (data.length != 0) {
// URL already in use, try again
return getPageUrl(_);
}
return randomStr;
}
var page_url = generatePageUrl(_);
// add it to the database, etc

关于node/redis : returning from inside callback? 中的 JavaScript 控制流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7957479/

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