使用JavaScript在SharePoint库中创建文件夹结构
要求是使用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
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是在文件夹结构中创建文件的最后一级,因此它不需要任何参数。