Javascript在评估所有参数之前返回结果?

时间:2016-01-03 17:32:06

标签: javascript angularjs

我在ngResource documentation中找到了以下示例:

var cards = CreditCard.query(function() {
  // GET: /user/123/card
  // server returns: [ {id:456, number:'1234', name:'Smith'} ];

  var card = cards[0];
  // each item is an instance of CreditCard
  expect(card instanceof CreditCard).toEqual(true);
  card.name = "J. Smith";
  // non GET methods are mapped onto the instances
  card.$save();
  // POST: /user/123/card/456 {id:456, number:'1234', name:'J. Smith'}
  // server returns: {id:456, number:'1234', name: 'J. Smith'};

  // our custom method is mapped as well.
  card.$charge({amount:9.99});
  // POST: /user/123/card/456?amount=9.99&charge=true {id:456, number:'1234', name:'J. Smith'}
});

我可以理解,函数query()的第二个参数是一个函数,它评估资源查询的成功结果。但同时,此函数采用从函数cards的结果分配的变量query()

我无法理解,如果这是正常的Javascript,因为每个异步操作都执行单个线程?

AngularJS的创作者为了在结果返回后执行函数参数而做出特别的努力?

我如何编写自己的函数

function myfunction(argument, runbefore, runafter) {
   runbefore();
   POSTPONE runafter();
   return Math.sin(argument);
}

哪个会在自身之前执行第二个参数,第三个参数在它之后执行?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,那么你问的是如何在return语句之后调用回调函数。可行的一种方法是通过内置函数在以后调用另一个函数。以此代码为例:

function doItLater(arg1, callbackFn) {
    setTimeout(1000, callbackFn);
    return arg1;
}

这将返回与传递的相同的参数,稍后将调用回调函数(函数返回后大约1秒)。还有其他方法可以延迟回调函数。例如,使用XMLHttpRequest,可以在收到HTTP响应后调用回调函数。您还可以连接到用户事件,以便在用户执行特定操作时调用函数。

如果您想对setTimeout之类的内容如何在单线程环境中起作用做一点澄清,我建议您阅读this article by John Resig