Cod*_*ent 40 javascript jquery asynchronous
我正在与第三方JavaScript库进行交互,其中一些函数调用是异步的.我没有将异步逻辑应用到我的应用程序中,而是优先为这些异步调用编写同步包装器.我知道,我知道,这是一个糟糕的设计,但这是一个很有可能被完全重写的演示项目.我需要一些东西向团队展示这个概念,而不是真的不得不担心性能.
这就是我想做的事情:
function sync_call(input) {
var value;
// Assume the async call always succeed
async_call(input, function(result) {value = result;} );
return value;
}
Run Code Online (Sandbox Code Playgroud)
我尝试了jQuery的延迟和承诺,但它似乎是针对异步设计模式.我想在我的代码中使用同步模式.
bit*_*oiu 32
这将永远不会起作用,因为JS VM已经从async_call转移并返回了您尚未设置的值.
不要试图打击自然和内置的语言行为.您应该使用回调技术或承诺.
function f(input, callback) {
var value;
// Assume the async call always succeed
async_call(input, function(result) { callback(result) };
}
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用一个承诺,看看Q.这样你就可以返回一个promise,然后你将一个then侦听器附加到它,这与回调基本相同.当promise解决后,将触发.