javascript执行函数后执行某些操作

时间:2015-09-02 21:21:08

标签: javascript callback promise

我看过很多关于它的帖子,但我仍然不理解回调。 我得到了这样的函数:

function getData (url) {
  request(url, function (error, response, data) {
      //...
      return data;
    }
  });
}

var data = getData(url);
// I got undefined because it's not finished
if (data) 
  ...

我如何等待返回我的功能继续。我已经看过很多关于回调和承诺的事情,但在这种情况下如何使用呢? 例如,我见过this post,但我不明白答案。

我正在使用节点js

3 个答案:

答案 0 :(得分:4)

首先,你有这样的问题。

问题在于,当您使用“请求”时,您需要了解编程中的异步。功能您的代码将并行执行,因此您不必等待服务器等待。

实际上,您需要在请求函数中使用if(数据)。 这样的事情。

request(url,  function(error, response, data){
    //your if and your code after the response of this request need's to be placed here.
}

如果你想在服务器响应之后处理请求,那么你就是这样做的,但是这样你的请求返回时总是有相同的代码?

所以你可以使用'回调'现在认为它是一个代表一个函数的变量。这有点奇怪,但你及时赶到 好的,所以你将创建一个名为' callback'的变量。代表一个功能,但是!魔法发生在这里,如果你使用的是一个变量,你可以在编写代码之前改变它。查看下面的示例。

function getData(url, callback){
 request(url, function(error, response, data){
   callback(error, response, data);
 }

//so when you use this function you can use another function in response like this.
getData('someUrl', function(error, response, data)
{
   //this piece of code will only be executed AFTER the request function returns.
});

我google了一下,发现该节点有一些同步调用,但如果你只使用同步功能在节点中构建一个系统,你应该更改你的服务器代码。

答案 1 :(得分:0)

getData应该将回调作为参数。

function getData(url, callback) {
    request(url, function (error, response, data) {
        callback(data);
    });
}

getData(url, function(data) {
    if (data) {
        ...
    }
});

答案 2 :(得分:0)

首先,您需要了解调用 getData 的主线程将完成,而另一个将在请求函数上打开,因此您需要继续在那个新线程中。为此,您需要一个回调函数,这是您作为参数发送到 getData 函数的一段代码,可以在请求函数完成时执行。你可以这样做:

function getData (url, callback) {
  request(url, function (error, response, data) {
      callback(data);
    }
  });
}

getData(url, function(data){
   // do something with the data returned
});