国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

循環(huán)異步調取接口使用數(shù)組promiseList保存,Promise.all(promiseList)獲取不到數(shù)組內容,then()返回空數(shù)組

這篇具有很好參考價值的文章主要介紹了循環(huán)異步調取接口使用數(shù)組promiseList保存,Promise.all(promiseList)獲取不到數(shù)組內容,then()返回空數(shù)組。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

在使用 vue + vant@2.13.2 技術棧的項目中,因為上傳文件的接口是單文件上傳,當使用批量上傳時,只能循環(huán)調取接口;然后有校驗內容:需要所有文件上傳成功后才能保存,在文件上傳不成功時點擊保存按鈕,則提示信息:"文件上傳未成功!"。

我使用 for 循環(huán)調取接口,然后定義了 promiseList 數(shù)組,循環(huán)一次將 promise 對象添加一次,然后使用 Promise.all(promiseList).then(result=>console.log(result)) 來改變保存的狀態(tài)。但是發(fā)現(xiàn)打印出的 result 總是空數(shù)組[]。debugger 代碼的執(zhí)行順序,應該是異步的原因導致的。

如下代碼:

/** 上傳文件組件 */
<van-uploader
  name="multipartFile"
  multiple
  v-model="jobFileList"
  :after-read="(file) => afterRead(file, jobFileList)"  // 默認寫法參數(shù)只有file對象,如需傳遞其他參數(shù)則需要此種寫法
  :before-read="(file) => beforeRead(file, jobFileList)"
  :before-delete="(file) => beforeDelete(file, jobFileList)"
  :max-count="9"
>
</van-uploader>

下面上傳了一張圖片文件格式;如下圖,其中 fileId、fileName、fileType、fileUrl 為自定義字段,上傳服務器成功后返回的,其他字段為 van-uploader 組件所支持的自有字段。
循環(huán)異步調取接口使用數(shù)組promiseList保存,Promise.all(promiseList)獲取不到數(shù)組內容,then()返回空數(shù)組,# JavaScript,javascript,promise.all,promise,圖片文件上傳

/** 上傳文件邏輯 */
afterRead(file) {
  const _this = this;
  this.isFetchDone = 1; // 文件是否全部上傳完成:0是 1否
  let promiseList = [];
  if (!Array.isArray(file)) {
    // 單張圖片上傳
    promiseList = [file];
  } else {
  	// 批量上傳
    promiseList = file;
  }
  for (const f of file) {
  	// 壓縮文件
    new Compressor(f.file, {
      quality: 0.5,
      success(result) {
        // blob格式轉換為file格式
        f.file= new File([result], result.name, { type: result.type });
        const p = _this.uploadFileChange(f);
        promiseList.push(p);
      },
      error(err) {
        console.warn(err.message);
      },
    });
  }
  // 使用Promise.all()改變保存狀態(tài)
  Promise.all(promiseList).then(result=> {
    console.log(result);  // []
    // 所有的文件狀態(tài)都是"done"則代表文件全部上傳完成 
    const bool = result.every(file => file.status === 'done');
     if (bool) {
       // 改變保存狀態(tài)為0,可保存
       this.isFetchDone = 0;
     }
   })
}
/** 上傳文件邏輯 */
uploadFileChange(f) {
  return new Promise((resolve, reject) => {
    f.status = "uploading";
    f.message = "上傳中...";
    // 上傳圖片要formData類型
    const formData = new FormData();
    formData.append("multipartFile", f.file);
    // 上傳文件接口
    uploadFile(formData).then((response) => {
      const { data, resultCode, resultMessage } = response;
      if (resultCode === 0 && data) {
        f.fileId = data.fileId;
        f.fileName = data.fileName;
        f.fileType = data.fileType;
        f.fileUrl = data.fileUrl;
        f.status = "done";
        f.message = "上傳完成";
        resolve(f);
      } else {
        f.status = "failed";
        f.message = "上傳失敗";
        reject(resultMessage);
      }
    }).catch(err => {
      f.status = "failed";
      f.message = "上傳失敗";
      reject(err)
    });
  })
},

上面代碼的執(zhí)行順序是,先執(zhí)行 for 循環(huán),然后直接執(zhí)行了 Promise.all(),最后執(zhí)行 promiseList.push();因為 forPromise.all()都是同步代碼,所以在 Promise.all(promiseList) 執(zhí)行時,promiseList 其實是一個空數(shù)組,所以 then 最終返回的是一個空數(shù)組。

我選擇的修改方式是將 for 循環(huán)放到了 Promise.all() 中,如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-801717.html

afterRead(file) {
  const _this = this;
  this.isFetchDone = 1;
  let promiseList = [];
  if (!Array.isArray(file)) {
    // 單張圖片上傳
    promiseList = [file];
  } else {
  	// 批量上傳
    promiseList = file;
  }
  /** 可以將 promiseList.map 單獨封裝成一個函數(shù)放在這里(優(yōu)化代碼) */
  Promise.all(
    promiseList.map(f => {
      return new Promise((resolve, reject) => {
        // 壓縮文件
        new Compressor(f.file, {
          quality: 0.5,
          success(result) {
            // blob格式轉換為file格式
            f.file= new File([result], result.name, { type: result.type });
            f.status = "uploading";
            f.message = "上傳中...";
            // 上傳圖片要formData類型
            const formData = new FormData();
            formData.append("multipartFile", f.file);
            // 上傳文件接口
            uploadFile(formData).then((response) => {
              const { data, resultCode, resultMessage } = response;
              if (resultCode === 0 && data) {
                f.fileId = data.fileId;
		        f.fileName = data.fileName;
		        f.fileType = data.fileType;
		        f.fileUrl = data.fileUrl;
                f.status = "done";
                f.message = "上傳完成";
                resolve(f);
              } else {
                f.status = "failed";
                f.message = "上傳失敗";
                reject(resultMessage);
              }
            }).catch(err => {
              f.status = "failed";
              f.message = "上傳失敗";
              reject(err);
            })
          },
          error(err) {
            console.warn(err.message);
          },
        });
      })
    })
  ).then(result => {
    const bool= result.every(file => file.status === 'done');
    if (bool) {
      this.isFetchDone = 0;
    }
  })
},

到了這里,關于循環(huán)異步調取接口使用數(shù)組promiseList保存,Promise.all(promiseList)獲取不到數(shù)組內容,then()返回空數(shù)組的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • uni-app中調取接口的三種方式與封裝uni.request()

    1、uni.request({}) 2、uni.request({}).then() 3、async/await 1、創(chuàng)建一個對象,將該對象掛在Vue的原型下 新建 @/common/request.js 文件 初步寫法(僅供參考): 二次更改: 2、進入main.js文件 例:在任意文件中書寫下列代碼可以調用。 this.$Z.get(); 3、在頁面中調用 uniapp的網(wǎng)絡請求方法 CODE u

    2024年02月09日
    瀏覽(23)
  • 視頻監(jiān)控/安防監(jiān)控/AI視頻分析/邊緣計算EasyCVR平臺如何調取登錄接口獲取token?

    視頻監(jiān)控/安防監(jiān)控/AI視頻分析/邊緣計算EasyCVR平臺如何調取登錄接口獲取token?

    安防視頻監(jiān)控管理平臺/視頻匯聚/視頻云存儲平臺EasyCVR能在復雜的網(wǎng)絡環(huán)境中,將分散的各類視頻資源進行統(tǒng)一匯聚、整合、集中管理,實現(xiàn)視頻資源的鑒權管理、按需調閱、全網(wǎng)分發(fā)、云存儲、AI智能分析等,視頻監(jiān)控智能分析平臺EasyCVR融合性強、開放度高、部署輕快,在

    2024年02月09日
    瀏覽(16)
  • 【JavaScript】數(shù)組 ② ( JavaScript 數(shù)組索引 | JavaScript 遍歷數(shù)組 | 使用 for 循環(huán)遍歷數(shù)組 )

    【JavaScript】數(shù)組 ② ( JavaScript 數(shù)組索引 | JavaScript 遍歷數(shù)組 | 使用 for 循環(huán)遍歷數(shù)組 )

    在 JavaScript 中 , 數(shù)組 的 \\\" 索引 \\\" 又稱為 \\\" 下標 \\\" , 從 0 開始計數(shù) , 是 可用于訪問 數(shù)組元素 的 \\\" 序號 \\\" ; 通過 數(shù)組索引 可以 訪問 / 獲取 / 修改 對應的數(shù)組元素 , 語法如下 : 訪問數(shù)組 元素 時 , 要注意數(shù)組的邊界 , 如果嘗試訪問一個不存在的索引 , 會返回 undefined 值 , 并不會報

    2024年04月28日
    瀏覽(22)
  • C++中使用嵌套循環(huán)遍歷多維數(shù)組

    一維數(shù)組:數(shù)組元素可以看做是一行數(shù)據(jù)。 二維數(shù)組:更像是一個表格,既有行數(shù)據(jù)又有列數(shù)據(jù)。 C++沒有提供二維數(shù)組類型,但用戶可以創(chuàng)建每個元素本身都是數(shù)組的數(shù)組。例如,假設要存儲 5 個城市在 4 年間的最高氣溫,可以這樣聲明數(shù)組: 該聲明意味著 maxtemps 是一個包

    2024年02月07日
    瀏覽(34)
  • 8.3Jmeter使用json提取器提取數(shù)組值并循環(huán)(循環(huán)控制器)遍歷使用

    示例:提取所有的值,并遍歷刪除 響應返回值例如:

    2024年02月07日
    瀏覽(25)
  • vue2項目中調取登錄接口登錄以后獲取個人信息以后,儲存在哪里,怎么在不同的頁面展示想要的信息?

    vue2項目中調取登錄接口登錄以后獲取個人信息以后,儲存在哪里,怎么在不同的頁面展示想要的信息?

    在Vue2項目中,可以將個人信息存儲在Vuex狀態(tài)管理中或者瀏覽器的本地存儲中,具體取決于項目的需求和規(guī)模。 1. Vuex狀態(tài)管理 在Vuex中定義一個user模塊,用于存儲用戶信息,可以在登錄成功后將用戶信息存儲到該模塊中。 // store/user.js ? ?const state = { ? ? ? ? ?userInfo: \\\'\\\' ?

    2023年04月25日
    瀏覽(21)
  • Postman進階篇(八)-使用postman抓包并批量保存接口

    Postman進階篇(八)-使用postman抓包并批量保存接口

    Postman 應用程序具有可以捕獲 HTTP 請求的內置代理,可以捕獲移動設備的http請求。但與專業(yè)的抓包工具相比,仍有許多不便的地方。 作為一個接口請求工具,postman并不是一個好的抓包工具。 但是如果想要批量保存應用的接口時,直接postman的抓包就非常的方便。 postman捕獲接

    2024年01月18日
    瀏覽(17)
  • Python 中的異步 for 循環(huán)

    本篇文章將提供有關 Python 中異步 for 循環(huán)的完整詳細信息。 我們將討論異步函數(shù)、異步 for 循環(huán)和睡眠概念。 接下來,我們將討論 Python 庫 asyncio 和運行異步代碼所需的函數(shù)。 最后,我們將看到幾個 Python 示例,以充分理解這個概念。 異步函數(shù)有助于與同一程序的其他函數(shù)

    2024年02月07日
    瀏覽(17)
  • JS for循環(huán)異步解決方案

    JavaScript中的for循環(huán)是一種同步操作,它將阻塞代碼的執(zhí)行,直到循環(huán)完成。但是,在處理異步操作時,使用同步for循環(huán)會導致問題。 為了解決這個問題,可以使用以下兩種異步解決方案: 遞歸是一種有效的解決方案,它可以確保異步操作按照預期執(zhí)行。以下是使用遞歸實現(xiàn)

    2024年02月13日
    瀏覽(40)
  • Winform中使用HttpClient(設置最大超時響應時間)調用接口并做業(yè)務處理時界面卡住,使用async Task await異步任務編程優(yōu)化

    Winform中使用HttpClient(設置最大超時響應時間)調用接口并做業(yè)務處理時界面卡住,使用async Task await異步任務編程優(yōu)化

    Winform中怎樣使用HttpClient調用http的get和post接口并將接口返回json數(shù)據(jù)解析為實體類: Winform中怎樣使用HttpClient調用http的get和post接口并將接口返回json數(shù)據(jù)解析為實體類_winform請求http接口_霸道流氓氣質的博客-CSDN博客 參考前面使用HttpClient調用http的get和post接口的小示例, 需要定

    2024年02月02日
    瀏覽(71)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包