在javascript中使用context.executeQueryAsync委托时如何形成回调

在javascript中使用context.executeQueryAsync委托时如何形成回调,javascript,sharepoint,Javascript,Sharepoint,很抱歉,还有一个关于回调的问题。在试图解决这个问题的过程中,我遇到了大约一百万个这样的问题。然而,我在这个特殊的场景中很难把头绕起来 我有下面的代码,它显然不起作用,因为代理显然不返回值(我在这里边学习边学习)。所以,我知道我现在需要一个回调,但我不确定如何更改代码来实现这一点。有人能帮忙吗 function MyFunction() { var ThisLoggedInUser = checkCurrentUser(); //do some stuff with the cur

很抱歉,还有一个关于回调的问题。在试图解决这个问题的过程中,我遇到了大约一百万个这样的问题。然而,我在这个特殊的场景中很难把头绕起来

我有下面的代码,它显然不起作用,因为代理显然不返回值(我在这里边学习边学习)。所以,我知道我现在需要一个回调,但我不确定如何更改代码来实现这一点。有人能帮忙吗

function MyFunction() {
    var ThisLoggedInUser = checkCurrentUser();
    //do some stuff with the current user
}

function checkCurrentUser() {
    var context = SP.ClientContext.get_current();
    var siteColl = context.get_site();
    var web = siteColl.get_rootWeb();
    this._currentUser = web.get_currentUser(); 
    context.load(this._currentUser);
    context.executeQueryAsync(Function.createDelegate(this, this.CheckUserSucceeded),
    Function.createDelegate(this, this.CheckUserfailed));
}

function CheckUserSucceeded() {
    var ThisUser = this._currentUser.get_title();

    return ThisUser;
}

function CheckUserfailed() {
    alert('failed');
}

您的CheckUserSuccess不会返回任何内容,因为它是异步的。。。。 所以你必须这样做:

var ThisUser;
function CheckUserSucceeded() {
  ThisUser = this._currentUser.getTitle()
   // here you can call an other action and do something with ThisUser
}

您可能还需要检查中的
$SP().whoami()
函数,并查看文档。

根据您的评论,您必须以您想要的方式重新键入代码,因为您无法在MyFunction()中使用此用户

例如,您可以这样做:

function CheckUser() { ... }

// then call the function to find the current user
CheckUser();

// then in  CheckUserSucceeded you call MyFunction()
function CheckUserSucceeded() {
  MyFunction(this._currentUser.getTitle())
}

// and now you can use ThisUser in MyFunction()
function MyFunction(ThisUser) {
  // do something with ThisUser
}

谢谢你的回复。但我不知道如何实现这一点。看起来您正在将ThisUser转换为一个全局变量,但我仍然无法使其工作,因为CheckUserSucceed正在异步运行。也许我的问题应该更具体一些。我需要对CheckUserSuccessed和MyFunction进行哪些更改才能使回调正常工作,以便在MyFunction中使用此用户?