2014-03-03 55 views
0

是一个函数:等待函数执行

function getItem(key) { 
    var item; 
    func(key, function(items) { 
     for (var key2 in items) { 
      if (key2 === key && items.hasOwnProperty(key2)) { 
       item = items[key2]; 
      } 
     } 
    }); 
    return item; 
} 

当我们调用它,响应我们得到了一个未定义。如何等待回调函数的执行,然后才返回结果?

回答

2

刚引进的回调作为参数传递给你的函数:

function getItem(key, callback) { 
    func(key, function(items) { 
    for (var key2 in items) { 
     if (key2 === key && items.hasOwnProperty(key2)) { 
     callback(items[key2]); 
     } 
    } 
    }); 
} 

getItem('bob', function (key) { 
    console.log(key); 
}); 
+0

+1正确的方式来处理这种情况。 – Praveen

+0

然后如何正确地满足条件:if(getItem('bob')&& getItem('count')=== 4){...} – user3374552

+0

我不认为你可以使用这种方法。您可能不得不使用一些延迟对象。有很多体面的模块可以帮助您。 – Andy

1

你不行。就这样。因为Javascript没有办法等待异步回调。

您可以重用回调的概念,返回自己的价值,而不是直接返回它

function getItem(key, callback) { 
    var item; 
    func(key, function(items) { 
    for (var key2 in items) { 
     if (key2 === key && items.hasOwnProperty(key2)) { 
     item = items[key2]; 
     } 
    } 

    callback(item); 
    }); 
} 

,然后用它getItem('key', function(item) { ... })

+2

你怎么知道它是异步的?在OP的帖子中没有什么那种。 –

+1

如果它是同步,操作代码应该可以工作:) –

+0

你不能保证它是同步的,那么根据定义它是异步的(即使实际上它不是) – SergeS