从javascript回调中返回一个值

时间:2016-01-31 22:59:01

标签: javascript

我需要将一个值传递给一个函数,该函数包含一个修饰符方法,然后return修改后的值。

最好的方法是什么?

我有read函数(解析内容)和scan函数(在内容中查找单词。

到目前为止,我有以下代码:

scanContent = function(url){
  read(url, function(err, article, meta) {

      var content = article.title + article.content

      return scan(content)

    }
    return scan(content)
  });

  return scan(content)

}

这显然不起作用,但我不确定这里的方法是什么。

3 个答案:

答案 0 :(得分:1)

您需要提供回调函数参数并将其与结果一起调用:

function byThree(n, callback) {
    var x = n * 3;
    callback(x);
}
var multiply = function(n, callback) {
    byThree(n, function(result) {
        callback(result);
    });
};

multiply(5, function(result) {
    console.log('result: ' + result);
});

答案 1 :(得分:1)

function byThree(n){
    return n * 3;
}
multiply = function(n){
    return byThree(n);
};
console.log("result: "+multiply(5));

虽然以下内容更有意义:

function multiply(n, m){
    return n * m;
};
console.log("result: "+multiply(5, 3));

以下更有意义:

console.log("result: " + 5 * 3);

答案 2 :(得分:0)

如果函数从内部回调中获得有意义的结果,那么它只能通过另一个回调返回有意义的结果。你不能欺骗程序流程。

所以,就像那样:

var scanContent = function(url, cb){
  read(url, function(err, article, meta) {
      var content = article.title + article.content

      return cb(scan(content)); // asume 'scan' is defined elsewhere
    }
  });
};

scanContent(function(text) { console.log(text); });

这可能导致callback hell。来自ES6的Promise可以避免这种情况。并generators使代码更加直接。

使用Promises(和箭头函数):

var scanContent = function(url){
  // simplified; it's better to always return a promise in the real code
  return read(url).then((err, article) => scan(article.title + article.content));
};

scanContent('example.com').then((text) => console.log(text));