这款异步js代码需要怎么改?

以下代码删掉了多余内容,调用方法会得到modal==null,如果必须使用异步请求,且modal实例在异步请求成功后生成,如何改变代码可以使得调用remoteModalOp得到modal对象?

function remoteModalOp(url, title, size) {
    if (!url) return;
    var modal = null;
    $.get(url, '', function(data) {
        if (data) {
            modal = bootbox.dialog({
                title: title,
                message: data,
                size: size,
                className: 'over'
            });
        }
    })
    return modal;
}

clipboard.png

阅读 2.4k
2 个回答

让remoteModalOp返回一个defer对象,请求完成后defer.reslove(modal)

实际上,js 中你很少能看到有同步的代码,可以认为 js 是面向回调的语言,所以你需要在 remoteModalOp 中添加一个参数,一个 callback:

function remoteModalOp(url, title, size, callback) {
    if (!url) return;
    var modal = null;
    $.get(url, '', function(data) {
        if (data) {
            modal = bootbox.dialog({   // 假设这是一个同步的方法
                title: title,
                message: data,
                size: size,
                className: 'over'
            });
            callback(modal);
        }
    })
}

可以通过以下代码调用。

remoteModalOp(url, title, size, function() {
// do something;
});

当然这里忽略了一些 err 的处理。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题