【问题标题】:Create folder structure in SharePoint library using JavaScript使用 JavaScript 在 SharePoint 库中创建文件夹结构
【发布时间】:2019-09-13 18:00:33
【问题描述】:

要求是使用 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

以下代码在数组中只有一个项目时完美运行,但在多个项目时失败。 在这里我检查文件夹是否存在,然后检查第 2 级,如果不存在则首先创建,以此类推剩余结构。

   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?

标签: javascript loops asynchronous sharepoint async-await


【解决方案1】:

停止使用延迟并停止使用done 方法。改用 then 的正确承诺。

假设这是 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');
        }
      } 
    }
  }));
}

【讨论】:

  • 好的,我会试一试,但由于所有内部方法都是异步的,我只希望它们都在我的循环结束之前执行。我会尽力让你知道。谢谢
  • @Rooney123 如果它们是异步的,它们应该返回 Promise(这使它们成为 awaitable)。如果他们不这样做,请让他们这样做。
  • 我尝试了建议的解决方案,但结果没有区别,它仍然只返回数组最后一项的所需结果。
  • @Rooney123 那么请向我们展示这些功能的实现。也许他们使用了一些全局变量或者被破坏了。例如,不带任何参数的函数CreateFileInSideFolder 很臭。
  • 由于 CreateFileInSideFolder 是在文件夹结构中创建文件的最后一层,因此不需要任何参数。
【解决方案2】:

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

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

 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()));  

【讨论】:

    猜你喜欢
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 2012-09-22
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    相关资源
    最近更新 更多