你可以等待JavaScript回调?



3 Answers

你刚才在JavaScript中遇到了很大的局限性。 一旦你的代码进入异步世界,就没有办法回到传统的程序执行流程。

在你的例子中,解决方案将是一个循环等待响应被填充。 问题是,JavaScript没有提供任何指令,可以让你无限循环而不占用100%的处理能力。 所以你最终会阻止浏览器,有时甚至到你的用户将无法回答实际问题的地步。

这里唯一的解决方案是坚持异步模式,并保持它。 我的建议是,你应该添加一个回调函数,必须做一些异步的工作,以便调用者可以在你的函数结束时执行的东西。

function confirm(fnCallback) 
{
    jConfirm('are you sure?', 'Confirmation Dialog', function(r) 
    {
        // Do something with r 

        fnCallback && fnCallback(r); // call the callback if provided
    });
}

// in the caller

alert('begin');

confirm(function(r)
{
    alert(r);

    alert('end');
})
Question

我试图使用从http://abeautifulsite.net/notebook/87 jQuery警报对话框,而不是默认警报(在我看来,这看起来很糟糕)。 这似乎是一个伟大的图书馆,但没有一个如何使用jConfirm库的例子。

我需要做这样的事情:

function confirm() {
        var result = false;
        var response = false;
        jConfirm('are you sure?', 'Confirmation Dialog',
          function(r) {
            result = r;
            response = true;
            return r;
        });
        if (response == true) {
            alert(result);
            return result;
        }
        else {
            //wait for response
            alert('hi');
        }
    }

和我的.net按钮的呼叫:

我已经在插件的网站上发布了一条评论(就在今天上午),Google搜索了javascript,并等待回调完成而没有结果。

任何想法,如何正确使用回调得到的结果,其余的JavaScript执行之前?

谢谢。




技术上, 是的 ,但我不会在网站上做到这一点。

看看基于Narcissus的 Narrative JavaScript

叙述性的JavaScript是对JavaScript语言的一个小的扩展,它支持异步事件回调的阻塞功能。 这使异步代码清晰可读,易于理解。

使用这种技术。

更新

检查JavaScript链

JavaScript Strands为JavaScript语言添加了协程和协作式线程支持,为异步事件回调启用了阻塞功能。 这使得利用异步操作的代码更加线性,可读和可管理。 链是建立在Neil Mix编写的叙述性JavaScript之上的,大部分的叙述性JavaScript都保留在链中,包括大部分文档。

在JavaScript中,您的代码不能简单地等待事件触发,事件必须始终由单独的异步事件处理程序处理。 有时候这很好,但是它往往会把一些简单的陈述变成粗糙的扭曲。 它也打破了封装功能的能力,因为调用函数必须知道提供一个回调处理程序。 股提供暂停和恢复执行线程的能力。 当事件结束时,执行可以暂停继续。 这使您可以编写难以阅读的异步事件处理,以简单,线性,可读的代码封装实现。




把回调想象成发送消息,这会使你的代码结构更好。




我想我已经想出了一个可能的解决方案来解决这个问题。 我正在阅读这篇文章: http : //treasure4developer.wordpress.com/2008/06/23/calling-postback-event-from-javascript/

基本上这个想法是,你强制从JavaScript回发,起初我发现回发将工作,但不会调用我的按钮事件,但在阅读文章后,我发现,我可以检测是否是JavaScript回发,只是打电话方法来处理

关心DotnetShadow




Related