使用JavaScript在SharePoint库中创建文件夹结构

使用JavaScript在SharePoint库中创建文件夹结构,javascript,loops,asynchronous,sharepoint,async-await,Javascript,Loops,Asynchronous,Sharepoint,Async Await,要求是使用JavaScript从SharePoint库中的数组创建文件夹结构。以下是所需的结构: var ary = [A,B,C] A -> Fldr1 -> Fldr2 -> File B -> Fldr1 -> Fldr2 -> File C -> Fldr1 -> Fldr2 -> File 但目前它正在库中创建文件夹A、B和C,但内部结构仅为C创建 所以我得到的结果是: A B C -> Fldr1 -> Fld

要求是使用JavaScript从SharePoint库中的数组创建文件夹结构。以下是所需的结构:

var ary = [A,B,C]

A -> Fldr1 -> Fldr2 -> File
B -> Fldr1 -> Fldr2 -> File
C -> Fldr1 -> Fldr2 -> File
但目前它正在库中创建文件夹A、B和C,但内部结构仅为C创建

所以我得到的结果是:

A 
B 
C -> Fldr1 -> Fldr2 -> File
当数组中只有一个项时,下面的代码可以完美地工作,但当有多个项时则失败。 在这里,我检查文件夹是否存在,然后检查第二级,如果不存在,首先创建,然后依次检查剩余的结构

   async function processArray(selectedCountries) {
    await selectedCountries.map(async (item) => {       
      let promiseCntry = await checkCntryFolder(item);       
        if(flag){ //if cntry exists                      
             let promiseChckfolder = await checkFolder(tdmrkNm);
                    if(flagFldr)//if folder exists
                    {                           
                        let promiseChkSubFolder =  await checkSubFolder(appStatus);
                            if(flagSub)//if sub -folder exists
                            {                                    
                                 let createFile =  await CreateFileInSideFolder();
                            }
                            else
                            {                                
                                let promiseCreateSub =  await createSubFolder(appStatus);                                        
                                let createFile =  await CreateFileInSideFolder();
                            }                   
                    }

            }

    });
  }
 }

停止使用延迟并停止使用done方法。用适当的承诺来代替

假设这是jQuery,具有done方法的对象也具有then方法,那么您可以而且应该直接使用async/await:

async function callAry(array) {
  return Promise.all(array.map(async (item) => {
    const flag = await checkCntryFolder(item);
    if (flag) {
      const folderFlag = await checkFolder(nm);
      if (folderFlag) {
        const subFlag = await checkSubFolder(Status);
        if (subFlag) {
          await CreateFileInSideFolder();
          console.log('file done');
        }
      } 
    }
  }));
}

好的,我终于让它工作了:

我没有向方法传递正确的参数。 以下是工作代码:

 async function processArray(selectedCountries) {
    return Promise.all(selectedCountries.map(async (item) => {      
    //await selectedCountries.map(async (item) => {                             
      let promiseCntry = await checkCntryFolder(item);       
        if(flag){ //if cntry exists                      
             let promiseChckfolder = await checkFolder(tdmrkNm,item);
                    if(flagFldr)//if folder exists
                    {                           
                        let promiseChkSubFolder =  await checkSubFolder(appStatus,tdmrkNm,item);
                            if(flagSub)//if sub -folder exists
                            {                                    
                                 let createFile =  await CreateFileInSideFolder(appStatus,tdmrkNm,item);
                            }
                            else
                            {                                
                                let promiseCreateSub =  await createSubFolder(appStatus,tdmrkNm,item);                                       
                                let createFile =  await CreateFileInSideFolder(appStatus,tdmrkNm,item);
                            }                   
                    }
                    else//if folder doesn't exist
                    {                            
                             let createFldr =  await createFolder(tdmrkNm,item);
                             let promiseChkSubFolder =  await checkSubFolder(appStatus,tdmrkNm,item);
                                if(flagSub)
                                {                                               
                                    let createFile =  await CreateFileInSideFolder(appStatus,tdmrkNm,item); 
                                }
                                else
                                {                                    
                                    let promiseCreateSub =  await createSubFolder(appStatus,tdmrkNm,item);
                                    let createFile =  await CreateFileInSideFolder(appStatus,tdmrkNm,item); 
                                } 
                    }
            }
            else//if cntry doesn't exist
            {                    
                     let createCntry = await createCntryFolder(item);             
                     let promiseChckfolder =  await checkFolder(tdmrkNm,item);                                              
                        if(flagFldr)//if folder exists
                        {                                 
                             let promiseChkSubFolder =  await checkSubFolder(appStatus,tdmrkNm,item);
                                if(flagSub) //if sub-folder exists
                                {                                            
                                    let createFile =  await CreateFileInSideFolder(appStatus,tdmrkNm,item);     
                                }
                                else //if sub-folder doesn't exist
                                {                                                                           
                                     let promiseCreateSub =  await createSubFolder(appStatus,tdmrkNm,item);                                           
                                     let createFile =  await CreateFileInSideFolder(appStatus,tdmrkNm,item);
                                }                                           
                        }
                        else //if folder doesn't exist
                        {                           

                             let createFldr =  await createFolder(tdmrkNm,item);
                             let promiseChkSubFolder =  await checkSubFolder(appStatus,tdmrkNm,item);
                                    if(flagSub)//if sub-folder exists
                                    { 
                                        let createFile = await CreateFileInSideFolder(appStatus,tdmrkNm,item);
                                    }
                                    else//if sub-folder doesn't exist
                                    { 
                                        let promiseCreateSub =  await createSubFolder(appStatus,tdmrkNm,item);
                                        let createFile =  await CreateFileInSideFolder(appStatus,tdmrkNm,item); 
                                    } 

                        }   
            }

        },Promise.resolve()));  

停止使用延迟并停止使用done方法。改用适当的承诺。那是什么库,jQuery?好的,我会尝试一下,但由于所有内部方法都是异步的,我只希望它们都在循环结束之前执行。我会尽量让你知道的。Thanks@Rooney123如果它们是异步的,它们应该返回让它们等待的承诺。如果没有,请将其更改为这样做。我尝试了建议的解决方案,但结果没有差异,它仍然只返回数组最后一项的所需结果。@Rooney123然后请向我们展示这些函数的实现。也许它们使用了一些全局变量,或者在其他方面被破坏了。例如,函数CreateFileInSideFolder不带任何参数是很难闻的。由于CreateFileInSideFolder是在文件夹结构中创建文件的最后一级,因此它不需要任何参数。