javascript - 从异步委托(delegate)函数返回值

标签 javascript sharepoint object model client

我正在使用 javascript 处理 Sharepoint 客户端对象模型,并希望尽可能多地重用我的代码。

使用 COM 的示例通常看起来像这样,先调用一个成功的委托(delegate)函数来输出结果。

function loadProfile()
{
    var context = SP.ClientContext.get_current();         
    var web = context.get_web();         
    var userInfoList = web.get_siteUserInfoList();
    camlQuery = new SP.CamlQuery();         
    camlQuery.set_viewXml('');         
    this.listItems = userInfoList.getItems(camlQuery);         
    context.load(listItems);         
    context.executeQueryAsync(Function.createDelegate(this, this.onProfileSuccessMethod), Function.createDelegate(this, this.onFail));     

}
function onProfileSuccessMethod(sender, args) 
{
    var item = listItems.itemAt(0);
    var first_name = item.get_item('FirstName');
    var last_name = item.get_item('LastName');
    alert(first_name + " " + last_name);
}

function onFail(sender, args)
{
  alert('Error: ' + args.get_message() + '\n' + args.get_stackTrace());
}

我想要实现的是能够在实例化一个对象后返回值,但考虑到它是异步的,我不确定这是怎么可能的,我是否需要“监听”调用以在返回值之前完成.

会是这样吗?或者你不能在它创建它的函数内部有一个委托(delegate)函数。抱歉我的理解有限!

var profile = new loadProfile("testid");
alert(profile.onProfileSuccessMethod());


function loadProfile (id) 
{
    this.user_id = id;
    var context = SP.ClientContext.get_current();         
    var web = context.get_web();         
    var userInfoList = web.get_siteUserInfoList();
    camlQuery = new SP.CamlQuery();         
    camlQuery.set_viewXml('');         
    this.listItems = userInfoList.getItems(camlQuery);         
    context.load(listItems);         
    context.executeQueryAsync(Function.createDelegate(this, this.onProfileSuccessMethod), Function.createDelegate(this, this.onFail));    
   this.onProfileSuccessMethod = function() 
{
    var item = listItems.itemAt(0);
    this.first_name = item.get_item('FirstName');
    this.last_name = item.get_item('LastName');
        return this.first_name


    };
}

最佳答案

如果是异步的,就不可能从中返回值。您需要使用回调模式。

function secondStep(data){
    console.log(data)
}

var profile = new loadProfile("testid", secondStep);

function loadProfile (id, callback) 
    ...
    this.onProfileSuccessMethod = function(){
        callback({});
    }

关于javascript - 从异步委托(delegate)函数返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13050692/

相关文章:

javascript - 查找跨时区的兼容时间

javascript - 使用 jQuery 顺序加载和淡入元素

javascript - 无法在 Jcrop 中拖动选择,什么会破坏它?

javascript - 在 razor foreach 语句中调用 JS 函数

sharepoint - SPWeb.Url 返回错误的 URL

SharePoint 2007 - 获取中央管理 URL ID(guid)

C++ 类对象指针和访问成员函数

javascript - Highcharts 不在 Internet Explorer 11 中呈现

对象数组的 C++ 问题

javascript - 如何将多个(未知数量)对象(作为参数)传递给函数 - Java 脚本