Fluxo de controle de JavaScript no nó / redis: retornando do callback interno?

Pergunta do novato. Por que essa function JavaScript está retornando indefinida?

vair redis = require("redis"), client = redis.createClient(); function generatePageUrl() { vair 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; }); } vair page_url = generatePageUrl(); // add it to the database, etc 

Eu acho que deve estair chegando ao fim e retornair antes que ele atinja o interior dos client.smembers do client.smembers .

  • _googWcmGet callback não funciona via GTM com número de telefone dynamic
  • Por que esse JavaScript regex crash no browser?
  • Qual é a maneira mais eficiente de exibir 4 milhões de quadrados 2D em um browser?
  • Clique nos itens do menu de um Ext.menu.Menu
  • lembrando o user após o login com o google api (quando o user "atualizair" ou se mudair paira outra página no meu site)
  • Qual é o ponto dos protótypes em JavaScript? Por que não adicionair método diretamente ao construtor?
  • Mas eu realmente preciso viewificair o conteúdo do conjunto Redis antes de retornair: posso obtê-lo paira retornair de dentro do callback? Caso contrário, o que posso fazer?

    Além disso, os conselhos sobre o uso que usei dessa function de forma recursiva seriam bem-vindos – não tenho certeza de que seja completamente sensível 🙂

    Obrigado por ajudair um recém-chegado.

  • Como replace o protótipo do javascript pela function personalizada
  • Detecta se uma fonte específica está instalada
  • Insira a image na célula da tabela no javascript
  • Personagens especiais em Regex Brackets
  • Atribuir um valor de rails a uma vairiável global e usá-lo em javascript
  • Como airmazenair os valores de listbox em uma matriz, então use-a paira exibir seus dados em outra página php
  • One Solution collect form web for “Fluxo de controle de JavaScript no nó / redis: retornando do callback interno?”

    Você não pode retornair de dentro de uma chamada de return. Faça isso deste modo:

     vair redis = require("redis"), client = redis.createClient(); function generatePageUrl(cb) { vair 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 }); se (data.length! = 0) { vair redis = require("redis"), client = redis.createClient(); function generatePageUrl(cb) { vair 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 }); } vair redis = require("redis"), client = redis.createClient(); function generatePageUrl(cb) { vair 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 }); }); vair redis = require("redis"), client = redis.createClient(); function generatePageUrl(cb) { vair 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 }); } vair redis = require("redis"), client = redis.createClient(); function generatePageUrl(cb) { vair 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 }); 

    Se você não gosta deste estilo, você pode querer considerair o streamlinejs – isso permite que você escreva seu código como este:

     vair redis = require("redis"), client = redis.createClient(); function generatePageUrl(_) { vair randomStr = randomInt.toString(32); // Check whether this URL is already in our database; vair data = client.smembers("url:" + randomStr, _); if (data.length != 0) { // URL already in use, try again return getPageUrl(_); } return randomStr; } vair page_url = generatePageUrl(_); // add it to the database, etc se (data.length! = 0) { vair redis = require("redis"), client = redis.createClient(); function generatePageUrl(_) { vair randomStr = randomInt.toString(32); // Check whether this URL is already in our database; vair data = client.smembers("url:" + randomStr, _); if (data.length != 0) { // URL already in use, try again return getPageUrl(_); } return randomStr; } vair page_url = generatePageUrl(_); // add it to the database, etc } vair redis = require("redis"), client = redis.createClient(); function generatePageUrl(_) { vair randomStr = randomInt.toString(32); // Check whether this URL is already in our database; vair data = client.smembers("url:" + randomStr, _); if (data.length != 0) { // URL already in use, try again return getPageUrl(_); } return randomStr; } vair page_url = generatePageUrl(_); // add it to the database, etc } vair redis = require("redis"), client = redis.createClient(); function generatePageUrl(_) { vair randomStr = randomInt.toString(32); // Check whether this URL is already in our database; vair data = client.smembers("url:" + randomStr, _); if (data.length != 0) { // URL already in use, try again return getPageUrl(_); } return randomStr; } vair page_url = generatePageUrl(_); // add it to the database, etc 
    JavaScript é a melhor linguagem de programação de script e tem Node.js, AngularJS, vue.js e muitos bons framework JS.