我在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);
}
哪个会在自身之前执行第二个参数,第三个参数在它之后执行?
答案 0 :(得分:0)
如果我理解正确,那么你问的是如何在return语句之后调用回调函数。可行的一种方法是通过内置函数在以后调用另一个函数。以此代码为例:
function doItLater(arg1, callbackFn) {
setTimeout(1000, callbackFn);
return arg1;
}
这将返回与传递的相同的参数,稍后将调用回调函数(函数返回后大约1秒)。还有其他方法可以延迟回调函数。例如,使用XMLHttpRequest
,可以在收到HTTP响应后调用回调函数。您还可以连接到用户事件,以便在用户执行特定操作时调用函数。
如果您想对setTimeout
之类的内容如何在单线程环境中起作用做一点澄清,我建议您阅读this article by John Resig。