Javascript 从异步委托函数返回值
我正在使用javascript处理Sharepoint客户端对象模型,并希望尽可能多地重用代码 使用COM的示例通常是这样的:先调用,然后使用successdelegate函数输出结果Javascript 从异步委托函数返回值,javascript,sharepoint,object,model,client,Javascript,Sharepoint,Object,Model,Client,我正在使用javascript处理Sharepoint客户端对象模型,并希望尽可能多地重用代码 使用COM的示例通常是这样的:先调用,然后使用successdelegate函数输出结果 function loadProfile() { var context = SP.ClientContext.get_current(); var web = context.get_web(); var userInfoList = web.get_
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());
}
我试图实现的是能够在实例化对象后返回值,但鉴于它是异步的,我不确定这是如何实现的,我是否需要在返回值之前“侦听”以完成调用
是这样的吗?或者在创建委托函数的函数内部不能有委托函数。为我有限的理解道歉
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({});
}