如果我有一个函数调用callFunc()
,并且在该函数内部有一个异步调用(如Angular中的$ http)...我从哪里调用callFunc()
对我来说有一些方法知道函数 - 包括其中的所有异步 - 何时完成执行?
答案 0 :(得分:0)
异步功能在技术上不会返回"已完成"在它完成之前。如果您具有服务控制器的控件,则可以首先向客户端发送响应大小,并且对于发送到客户端的每个数据块,您可以创建自己的进度条以查看它何时完成。但除了调用回调函数之外,没有简单的方法可以看到它是否已完成。
说真的,你的用例是什么?
答案 1 :(得分:0)
取决于您想要做什么,以及调用的异步函数
调用带有可选回调的异步函数
@font-face {
font-family: 'BBCNassim';
src: url( ../fonts/BBCNassim.TTF );
src: local("BBCNassim"), url("../fonts/BBCNassim.TTF") format("truetype");
}
调用需要回调函数的异步函数
function callFunc(callback) {
// this ones easy, provide a callback or not, doesn't matter
asynchFunction(callback);
}
调用异步函数并在调用可选提供的回调之前管理结果
function callFunc(callback) {
// provide a dummy callback if one isn't provided
callback = callback || function() {};
asynchFunction(callback);
}
替代方案:使用承诺
在$ http 的情况下
function callFunc(callback) {
function localCallback(param1, param2) {
var manipulateParams = param1 + param2;
if(typeof callback == 'function') {
callback(manipulateParams );
}
}
asynchFunction(localCallback);
}
如果函数没有返回一个promise,那么我们假设它使用" node"惯例
function callFunc() {
return $http({
method: 'GET',
url: 'url'
});
}
在这两种情况下,您都可以像这样使用callFunc
function callFunc() {
var deferred = $q.defer();
somefunc(param, function(err, result) {
if(err) {
deferred.reject(err);
}
else {
deferred.resolve(result);
}
});
return deferred.promise;
}
如果没有您的具体细节,那就是我能提供的最好的
答案 2 :(得分:0)
你可以在角度中使用promise。
function callFunc() {
var deferred = $q.defer();
$http({
method: 'GET',
url: '/someUrl'
}).then(function successCallback(response) {
deferred.resolve('success!');
}, function errorCallback(response) {
deferred.reject('failed.');
});
return deferred.promise;
}
var promise = callFunc();
promise.then(function(res) {
alert('successCallback: ' + res);
}, function(res) {
alert('errorCallback: ' + res);
}, function(res) {
alert('notifyCallback: ' + res);
});
答案 3 :(得分:-1)
以下是带回调功能的javascript代码示例。
Image ImgPic = Image.FromFile("AvtarPic.png");
Image FranceFlagOverlay = Image.FromFile("FranceFlag.png");
Image img = new Bitmap(ImgPic.Width, ImgPic.Height);
using (Graphics gr = Graphics.FromImage(img))
{
gr.DrawImage(ImgPic, new Point(0, 0));
gr.DrawImage(FranceFlagOverlay, new Point(0, 0));
}
img.Save("ImgPicWithFranceFlagOverlay.png", ImageFormat.Png);
调用函数的示例
function callFunc( param1, param2, callback ) {
//your codes of the function
//call the callback with some parameters
window[callback]( param1, param2 );
}
函数调用
中提到的回调函数示例callFunc( 'this is param1', 'this is param2', 'call_this_function' );