0

コールバックに関するさらに別の質問で申し訳ありません。この問題を解決しようとして、私は約 100 万のそれらに出くわしました。ただし、この特定のシナリオに頭を悩ませています。

私は以下のコードを持っていますが、デリゲートは明らかに値を返さないため、明らかに機能しません (私はここで学んでいます)。したがって、この時点でコールバックが必要であることはわかっていますが、それを行うためにこのコードを変更する方法がわかりません。誰でも助けることができますか?

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');
}
4

2 に答える 2

1

コメントに基づいて、MyFunction() で ThisUser を使用できないため、コードを希望する方法に変更する必要があります。

たとえば、次のようにすることができます。

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
}
于 2013-11-04T20:23:30.570 に答える
0

Your CheckUserSucceed won't return anything because it's asynchronous.... So you have to do something like that:

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

You may also want to check the $SP().whoami() function from http://aymkdn.github.io/SharepointPlus/ and see the documentation.

于 2013-11-01T22:40:56.863 に答える