首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nodejs,redis自动完成程序,闭包

Nodejs,redis自动完成程序,闭包
EN

Stack Overflow用户
提问于 2014-01-23 01:27:40
回答 1查看 150关注 0票数 0

*重写代码

我正在尝试将antirez的自动完成程序转换为javascript,以便在node.js中使用它。

我不能通过闭包问题。也许有人能帮我。

我看到了问题所在,但不知道如何解决它们。

while循环正在触发,中断不正确,无法工作等。

代码:

代码语言:javascript
复制
var acp = {

  vars: {

    dict     : false,
    count    : false,
    prefix   : false,
    rangeLen : 10,
    start    : false,
    results  : false,
    range    : false,

  },

  sendResults: function(){
    console.log(acp.vars.results);
  },

  getzrank: function(){

    redis.zrank( acp.vars.dict, acp.vars.prefix, function( err, start ){

      acp.vars.start = start;

    });

  },

  getzrange: function(){

    redis.zrange( acp.vars.dict, acp.vars.start, parseFloat( acp.vars.start+acp.vars.rangeLen-1 ), function( err, range ){

      acp.vars.range = range;

    });

  },

  createAutocomplete: function(){

    while( acp.vars.results.length != acp.vars.count ){

      acp.getzrange();

      acp.vars.start+=acp.vars.rangeLen;

      if( ! acp.vars.range || acp.vars.range.length == 0 ) { break; }

      for ( var i in acp.vars.range ){

        var minLen =  Math.min(i.length,acp.vars.prefix.length); 

        if( i.substr( 0, minLen ) != acp.vars.prefix.substr( 0, minLen ) ){ 

          acp.vars.count = acp.vars.results.length;

        }

        if( i.substr( 0, i.length-1 ) == "*" && acp.vars.results.length != acp.vars.count) {

          acp.vars.results.push( i.substr(0,-1) );

        }

      }

    }

    acp.sendResults();

  },

  init: function(dict,prefix,count){

    acp.vars.range   = false;

    acp.vars.dict    = dict;
    acp.vars.prefix  = prefix;
    acp.vars.count   = count;
    acp.vars.results = [];

    acp.vars.start   = acp.getzrank();

    if( ! acp.vars.start ){ acp.sendResults(); }
    else{ acp.createAutocomplete(); }

  }

}
EN

回答 1

Stack Overflow用户

发布于 2014-01-23 02:04:18

break语句不在while循环的作用域内,因为它嵌套在匿名函数中。不确定这是否能解决你的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21289768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档