我试图编写一个简单的测试,创建一个图像元素,检查图像属性,然后返回true / false。问题是使用onload事件会使测试异步。就其本身而言,这不是问题(使用下面的代码完成回调很容易),但是我不知道是如何将其封装到一个返回布尔值的函数中。
我尝试了闭包,递归和自执行功能的各种组合,但是没有运气。
所以我的问题是:我是不是很专心并且忽略了一些简单的事情,或者实际上这是不可能的,因为无论如何,我仍在尝试将异步函数包装在同步期望中?
这是代码:
var supportsImage = function(callback) {
var img = new Image();
img.onload = function() {
//Check attributes and pass true or false to callback
callback(true);
};
img.src = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';
};
supportsImage(function(status){
console.log(status);
});
明确地说,我想要的是能够将其包装在某种东西中,使得它可以像这样使用:
if (supportsImage) {
//Do some crazy stuff
}
谢谢!
(顺便说一句,我知道关于同步与异步的困惑有很多SO问题。如果可以将其简化为先前回答的问题,我们深表歉意。)
最佳答案
不,但是您可以将“疯狂的东西”传递给supportsImage
,例如
supportsImage(function(result){
if(result) {
//Do some crazy stuff
}
});