方法中的javascript变量在方法外部使用

方法中的javascript变量在方法外部使用,javascript,Javascript,这是我的密码: var count = 0; function retrieveCurrentListProperties() { clientContext = new SP.ClientContext.get_current(); web = clientContext.get_web(); var list = web.get_lists().getByTitle("Urgent Alerts"); var camlQuery = new SP.CamlQ

这是我的密码:

var count = 0;

function retrieveCurrentListProperties() {
    clientContext = new SP.ClientContext.get_current();
    web = clientContext.get_web();
    var list = web.get_lists().getByTitle("Urgent Alerts");
    var camlQuery = new SP.CamlQuery();
    var q =  "<View><Query><Where><Eq><FieldRef Name='End_x0020_Date'/><Value Type='DateTime'><Today/></Value></Eq></Where></Query></View>";
    camlQuery.set_viewXml(q);
    this.listItems = list.getItems(camlQuery);
    clientContext.load(this.listItems);
    clientContext.executeQueryAsync(Function.createDelegate(this, this.onCListItemsLoadSuccess), 
    Function.createDelegate(this, this.onQueryFailed));

}

function onCListItemsLoadSuccess(sender, args) {

    var count1 = 0;
    var listEnumerator = this.listItems.getEnumerator();
    //iterate though all of the items

count1 = this.listItems.get_count();


}




function onQueryFailed(sender, args) {
    alert('request failed ' + args.get_message() + '\n' + args.get_stackTrace());
}



                count = 1;
var计数=0;
函数retrieveCurrentListProperties(){
clientContext=new SP.clientContext.get_current();
web=clientContext.get_web();
var list=web.get_list().getByTitle(“紧急警报”);
var camlQuery=new SP.camlQuery();
var q=“”;
camlQuery.set_viewXml(q);
this.listItems=list.getItems(camlQuery);
load(this.listItems);
clientContext.executeQueryAsync(Function.createDelegate(this,this.onCListItemsLoadSuccess),
Function.createDelegate(this,this.onQueryFailed));
}
函数onCListItemsLoadSuccess(发送方,参数){
var count1=0;
var listEnumerator=this.listItems.getEnumerator();
//迭代所有项目
count1=this.listItems.get_count();
}
函数onQueryFailed(发送方,参数){
警报('请求失败'+args.get_message()+'\n'+args.get_stackTrace());
}
计数=1;

此代码从sharepoint检索列表,然后统计该列表中的项目数。我需要将
count1
用于
count=1
的另一个部分,但如果我这样做,显然会抛出一个错误。 如何以我想要的方式使用count1因为在服务器上异步执行当前挂起的请求,所以通常使用两种方法来控制SharePoint中异步调用的顺序执行

  • 回调
  • 推迟
使用回调方法,您可以这样声明函数

function getData(Success,Error) {
   //...
   clientContext.executeQueryAsync(function() {
             var result = ...
             Success(result);
           },
           Error
    );
} 
延迟方法基于承诺模式,请参阅CSOM使用承诺的详细信息

使用回调方法的示例 建议 避免全局变量

将代码包装在作用域函数中,使用该作用域函数的局部变量,并使其他函数在其中闭包

(function() { // Begin scoping function
    var clientContext; // Global to your code, invisible outside the scoping function
    function loadListItems(listTitle) {
        // ...
    }
})();    
函数的用法。createDelegate

在大多数情况下,不需要使用
Function.createDelegate
包装处理程序,而是可以编写:

ctx.executeQueryAsync(succeeded,failed);


“但很明显,如果我做了
count=count1
,它会抛出一个错误”-为什么?
count
count1
都是
这个.listItems.get\u count()
。全局声明并正确初始化。使用在中分配给它们的方法之外的变量很容易。在变量被赋值之前使用它们是很棘手的。你在哪里做count=count1?这只是因为范围界定
ctx.executeQueryAsync(succeeded,failed);
ctx.executeQueryAsync(function(){
    //...
  },
  function(sender,args){
    //Error handling goes here
  }
);