我试图编写一个简单的测试,创建一个图像元素,检查图像属性,然后返回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
    }
});

09-25 19:36