Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js回调混淆_Javascript_Node.js_Asynchronous_Callback_Nowjs Sockets - Fatal编程技术网

Javascript Node.js回调混淆

Javascript Node.js回调混淆,javascript,node.js,asynchronous,callback,nowjs-sockets,Javascript,Node.js,Asynchronous,Callback,Nowjs Sockets,我正在尝试使用nowjs在nodejs应用程序上实现一个自动完成程序 everyone.now.sendAutocomplete = function(search) { var response = getAutocomplete(search); console.log("response"); console.log(response); }; 这要求: function getAutocomplete(search) { console.log(search);

我正在尝试使用nowjs在nodejs应用程序上实现一个自动完成程序

everyone.now.sendAutocomplete = function(search) {  
  var response = getAutocomplete(search);
  console.log("response");
  console.log(response);
};
这要求:

function getAutocomplete(search) {
    console.log(search);
    var artist = new Array();

    request({uri: 'http://musicbrainz.org/ws/2/artist/?query=' + search + '&limit=4', headers: "Musicbrainz Application Version 1"}, function(error, response, body) {
        par.parseString(body, function(err, result) {
            var count = result['artist-list']['@']['count'];

            var artists = result['artist-list']['artist'];
            // var artist = new Array();

            if (count > 1) {
            artists.forEach(function(a) {
                var att = a['@'];
                var id = att['id'];
                var name = a['name'];
                var dis = a['disambiguation'];

                if (dis) {
                    var display = name + " (" + dis + " )";
                } else {
                    display = name;
                }
                artist.push({'id':id, 'name': name, 'disambiguation':dis,
                                     'label':display, 'value':name, 'category':"Artists"});
            });
            //everyone.now.receiveResponse(artist);
            console.log("artist");
            console.log(artist);
            return artist;
        } else {
            console.log(artists);
            var att = artists['@'];
            var id = att['id'];
            var name = artists['name'];
            var dis = artists['disambiguation'];
            var resp = [{'id':id, 'name': name, 'disambiguation':dis,
                                 'label':name, 'value':name, 'category':"Artists"}];
            return resp;
            // everyone.now.receiveResponse([{'id':id, 'name': name, 'disambiguation':dis,
            //                       'label':name, 'value':name, 'category':"Artists"}]);
        }

        });
    });
}

但是,console.log(response)表示响应未定义。我是node的新手,所以答案可能很简单,但仍然无法理解

您将异步调用视为同步调用。getAutocomplete需要使用回调函数来获取响应。在您的
请求
调用和
解析字符串
调用中,您已经使用了很多

像这样:

everyone.now.sendAutocomplete = function(search) {  
    getAutocomplete(search, function (response) {
        console.log("response");
        console.log(response);
    });
};
而不是
返回

function getAutocomplete(search, callback) {
    // ...
    callback(result);
    // ...
}

您将异步调用视为同步调用。getAutocomplete需要使用回调函数来获取响应。在您的
请求
调用和
解析字符串
调用中,您已经使用了很多

像这样:

everyone.now.sendAutocomplete = function(search) {  
    getAutocomplete(search, function (response) {
        console.log("response");
        console.log(response);
    });
};
而不是
返回

function getAutocomplete(search, callback) {
    // ...
    callback(result);
    // ...
}
查看如何提问以了解未来的问题。这将节省我们的时间。查看如何提问以了解未来的问题。这将节省我们的时间。