웹 프론트엔드 JS 튜토리얼 promsie.all과 promise의 순차적 실행에 대한 자세한 설명

promsie.all과 promise의 순차적 실행에 대한 자세한 설명

Jan 20, 2018 am 11:50 AM
ie promise

이 글은 주로 WeChat 애플릿 promsie.all에 대한 관련 정보와 약속의 순차적 실행을 소개합니다. 이 글이 도움이 필요한 모든 사람에게 도움이 되기를 바랍니다.

WeChat 미니 프로그램 promsie.all과 promise가 순차적으로 실행됩니다

1. 소개

최근 미니 프로그램을 개발 중인데, 제출한 양식 중 하나가 폼 제출이었습니다. 여기에서 WeChat이 수행하는 작업은 먼저 이미지를 업로드하고 배경에서 이미지 이름과 주소를 반환한 다음 양식의 해당 위치에 이미지 정보를 삽입한 다음 양식을 제출하는 것입니다. 양식을 업로드하기 전에 이미지를 요청하세요. WeChat 애플릿에 여러 장의 사진이 있는 경우 하나씩만 업로드할 수 있습니다. 쉽게 말하면 이미지 업로드(복수요청) 후, 반환값을 받고, 폼을 업로드하면 어떻게 해야 할까요?

2. Promise.all 및 Promise.race

먼저 Promise.all과 Promise.race 메서드의 차이점을 소개하겠습니다. 또는 처음으로 전달된 Promise(거부 참조)가 실패하면 Promise가 반환됩니다. iterable은 반복 가능한 객체이지만 일반적으로 배열입니다. 반환 값도 Promise 객체입니다.

몇 가지 사항을 명확히 해야 합니다. Promise.all은 여러 Promise 객체를 동시에 실행하며, 반환된 Promise 객체의 매개변수는 배열의 항목도 반복 가능한 객체가 실행되는 순서대로 반환됩니다. .

Promise.race(iterable) 메소드는 iterable 매개변수에 "해결" 또는 "거부"라는 약속 개체가 있는 한 새 약속은 즉시 "해결" 또는 "거부"되고 다음을 가져옵니다. 이전 Promise 객체의 반환 값 또는 오류 이유. 따라서 iterable 중 하나가 완료되거나 실패하는 한 Promise 객체가 즉시 반환됩니다. race라는 단어에 따르면, 첫 번째 도착은 Promise 객체를 즉시 반환한다는 결론을 내릴 수도 있습니다.

위의 정의에 따라 우리는 Promise.all 메서드를 사용하여 요구 사항을 완료합니다.


//存储promise对象的数组
let promiseArr = [];
//图片地址数组
let imageList = [];
//将图片地址的上传的promise对象加入到promiseArr
for (let i = 0; i < imageList.length; i++) {
  let promise = new Promise((resolve, reject) => {
    //微信图片上传
    wx.uploadFile({
      url: &#39;https://xxx.xxx.xxx/api/uploadImage&#39;,
      filePath: imageList[i],
      name: &#39;file&#39;,
      success: function(res) {
        //可以对res进行处理,然后resolve返回
        resolve(res);
      },
      fail: function (error) {
        reject(error);
      },
      complete: function (res) {
      },
    })
  });
  promiseArr.push(promise)
}
//Promise.all处理promiseArr数组中的每一个promise对象
Promise.all(promiseArr).then((result) => {
  //对返回的result数组进行处理
})
로그인 후 복사

3. WeChat 애플릿 문제

WeChat 애플릿의 이미지 업로드 기능 작업 시 먼저 이미지를 업로드한 다음 이미지 이름과 주소를 응답으로 반환할 수 있습니다.

여기서는 promise.all 메소드를 사용하는데 문제가 있습니다. Promise.all은 동시에 실행되지만 WeChat 애플릿은 한 번에 10개의 동시 요청만 할 수 있습니다.

이미지 업로드의 경우 한 번에 10개 이상의 이미지를 업로드해야 할 수 있습니다. 이는 한 번에 10개 이상의 동시 요청을 의미합니다. 이 경우 WeChat은 오류

"WAService.js:4 uploadFile:를 보고합니다. createUploadTask 실패: 실패가 최대 업로드 연결 수 10을 초과했습니다."

4. 순차적 Promise 실행 처리

Promise.all은 동시에 여러 promsie 개체를 실행하기 때문에 이러한 동시 실행 수에는 제한이 있습니다. time.이므로 이 제한을 극복하려면 각 Promise를 순차적으로 실행하면 됩니다.

코드는 다음과 같습니다.


//顺序处理函数
function sequenceTasks(tasks) {
  //记录返回值
  function recordValue(results, value) {
    results.push(value);
    return results;
  }
  let pushValue = recordValue.bind(null, []);
  let promise = Promise.resolve();
  // 处理tasks数组中的每个函数对象
  for (let i = 0; i < tasks.length; i++) {
    let task = tasks[i];
    promise = promise.then(task).then(pushValue);
  }
  return promise;
}

//函数数组,每个函数的返回值是一个promise对象
let promiseFuncArr = [];
//图片地址数组
let imageList = [];
//将图片地址的上传的函数加入到promiseFuncArr数组中
for (let i = 0; i < imageList.length; i++) {
  let promiseTemp = function(){
    return new Promise((resolve, reject) => {
      //微信图片上传
      wx.uploadFile({
        url: &#39;https://xxx.xxx.xxx/api/uploadImage&#39;,
        filePath: imageList[i],
        name: &#39;file&#39;,
        success: function(res) {
          //可以对res进行处理,然后resolve返回
          resolve(res);
        },
        fail: function (error) {
          reject(error);
        },
        complete: function (res) {
        },
      })
    });
  };
  promiseFuncArr.push(promiseTemp)
}

sequenceTasks(promiseFuncArr).then((result) => {
  //对返回的result数组进行处理
});
로그인 후 복사

1. 다음은 sequenceTasks 함수의 역할에 대한 설명입니다

먼저, RecordValue 함수는 두 개의 값을 전달합니다. 하나는 반환된 결과 배열이고, 다른 하나는 값으로 전달됩니다. results.push(value); 각 값을 결과 배열에 푸시한 다음 결과 배열을 반환합니다.


let pushValue = recordValue.bind(null, []);
로그인 후 복사

pushValue도 함수 개체입니다. RecordValue를 [ ] 배열에 바인딩합니다. 첫 번째 매개변수는 null로 전달되며 함수의 포인터를 변경하지 않습니다. 따라서 pushValue는 다음을 포함하는 함수(값) 함수입니다. 매개변수를 값으로 전달합니다.


promise = promise.then(task).then(pushValue);
로그인 후 복사

task는 함수이며, 이 함수는 promise 객체를 반환합니다. 우리의 경우 이미지 업로드 함수가 생성되고, pushValue는 함수(value)입니다. ), value 는 이미지가 업로드된 후의 반환 값을 pushValue 는 결과 배열에 푸시하고, 순차적으로 실행한 후, 결과 배열에 추가하여 최종적으로 반환합니다. 객체 배열을 얻을 수 있으며 배열에는 순차적 실행으로 반환된 결과가 포함됩니다.

2. 순서 작업의 for 루프는 다음과 같은 축소 방법으로 작성할 수도 있습니다.


function sequenceTasks(tasks) {
  //记录返回值
  function recordValue(results, value) {
    results.push(value);
    return results;
  }
  let pushValue = recordValue.bind(null, []);
  return tasks.reduce(function (promise, task) {
    return promise.then(task).then(pushValue);
  }, Promise.resolve());
}
로그인 후 복사

관련 권장 사항:

headjs는 웹 사이트의 병렬 로딩을 구현하지만 JS의 순차적 실행은

Java 로딩 시퀀스 실행 결과 상세 소개

JS 코드 실행 순서는 어떻게 되나요

위 내용은 promsie.all과 promise의 순차적 실행에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Internet Explorer에서 Edge 열기: MS Edge 리디렉션을 중지하는 방법 Internet Explorer에서 Edge 열기: MS Edge 리디렉션을 중지하는 방법 Apr 14, 2023 pm 06:13 PM

Internet Explorer가 오랫동안 인기를 끌지 못했다는 것은 비밀이 아니지만 Windows 11이 출시되면서 현실이 시작되었습니다. 나중에 IE를 대체하는 경우도 있지만 이제 Edge는 Microsoft 최신 운영 체제의 기본 브라우저입니다. 현재로서는 Windows 11에서 Internet Explorer를 계속 활성화할 수 있습니다. 그러나 IE11(최신 버전)은 이미 공식적인 종료 날짜인 2022년 6월 15일을 갖고 있으며 시계는 계속 흐르고 있습니다. 이를 염두에 두고 Internet Explorer가 때때로 Edge를 여는 것을 발견했을 수 있으며 마음에 들지 않을 수도 있습니다. 그럼 왜 이런 일이 일어나는 걸까요? 존재하다

win11에서 ie11 브라우저를 사용할 수 없으면 어떻게 해야 합니까? (win11은 IE 브라우저를 사용할 수 없습니다) win11에서 ie11 브라우저를 사용할 수 없으면 어떻게 해야 합니까? (win11은 IE 브라우저를 사용할 수 없습니다) Feb 10, 2024 am 10:30 AM

점점 더 많은 사용자들이 win11 시스템을 업그레이드하기 시작하고 있습니다. 사용자마다 사용 습관이 다르기 때문에 여전히 많은 사용자들이 ie11 브라우저를 사용하고 있습니다. 그렇다면 win11 시스템에서 ie 브라우저를 사용할 수 없으면 어떻게 해야 합니까? windows11은 여전히 ​​ie11을 지원하나요? 해결책을 살펴보겠습니다. win11에서 ie11 브라우저를 사용할 수 없는 문제 해결 방법 1. 먼저 시작 메뉴를 마우스 오른쪽 버튼으로 클릭한 후 "명령 프롬프트(관리자)"를 선택하여 엽니다. 2. 연 후 "Netshwinsockreset"을 직접 입력하고 Enter를 눌러 확인합니다. 3. 확인 후 "netshadvfirewallreset&rdqu"를 입력하세요.

약속 지키기: 약속 이행의 장점과 단점 약속 지키기: 약속 이행의 장점과 단점 Feb 18, 2024 pm 08:06 PM

일상생활에서 우리는 약속과 이행 사이에서 종종 문제에 직면합니다. 개인적인 관계에서든 비즈니스 거래에서든 약속을 이행하는 것은 신뢰 구축의 핵심입니다. 그러나 헌신의 장단점은 종종 논란의 여지가 있습니다. 이 기사에서는 약속의 장단점을 살펴보고 약속을 지키는 방법에 대한 몇 가지 조언을 제공합니다. 약속된 혜택은 분명합니다. 첫째, 헌신은 신뢰를 구축합니다. 사람이 약속을 지키면 다른 사람들이 자신을 믿을 만한 사람이라고 믿게 만듭니다. 신뢰는 사람들 사이에 확립된 유대이며, 이는 사람들을 더 나은 사람으로 만들 수 있습니다.

Vue 애플리케이션에서 Uncaught (약속대로) TypeError가 발생하면 어떻게 해야 합니까? Vue 애플리케이션에서 Uncaught (약속대로) TypeError가 발생하면 어떻게 해야 합니까? Jun 25, 2023 pm 06:39 PM

Vue는 널리 사용되는 프런트엔드 프레임워크로, 애플리케이션을 개발할 때 다양한 오류와 문제가 자주 발생합니다. 그중 Uncaught(inpromise)TypeError가 일반적인 오류 유형입니다. 이번 글에서는 그 원인과 해결방법에 대해 알아보겠습니다. Uncaught(inpromise)TypeError란 무엇입니까? Uncaught(inpromise)TypeError 오류는 일반적으로 다음에서 발생합니다.

Promise.resolve()에 대해 자세히 알아보세요. Promise.resolve()에 대해 자세히 알아보세요. Feb 18, 2024 pm 07:13 PM

Promise.resolve()에 대한 자세한 설명에는 특정 코드 예제가 필요합니다. Promise는 비동기 작업을 처리하기 위한 JavaScript의 메커니즘입니다. 실제 개발에서는 순서대로 실행해야 하는 일부 비동기 작업을 처리해야 하는 경우가 종종 있으며, 이행된 Promise 객체를 반환하기 위해 Promise.resolve() 메서드가 사용됩니다. Promise.resolve()는 Promise 클래스의 정적 메서드입니다.

Win10에서 IE를 열 때 Edge로 자동 점프를 취소하는 방법_IE 브라우저 페이지 자동 점프에 대한 솔루션 Win10에서 IE를 열 때 Edge로 자동 점프를 취소하는 방법_IE 브라우저 페이지 자동 점프에 대한 솔루션 Mar 20, 2024 pm 09:21 PM

최근 많은 win10 사용자는 컴퓨터 브라우저를 사용할 때 IE 브라우저가 항상 자동으로 엣지 브라우저로 이동한다는 사실을 발견했습니다. 그러면 win10에서 IE를 열 때 자동 엣지 브라우저로 이동을 끄는 방법은 무엇입니까? 이 사이트에서는 win10에서 IE를 열 때 자동으로 가장자리로 이동하고 닫는 방법을 사용자에게 주의 깊게 소개합니다. 1. 엣지 브라우저에 로그인하고 오른쪽 상단에서...를 클릭하고 드롭다운 설정 옵션을 찾습니다. 2. 설정을 입력한 후 왼쪽 열에서 기본 브라우저를 클릭합니다. 3. 마지막으로 호환성에서 웹사이트가 IE 모드에서 다시 로드되는 것을 허용하지 않는 확인란을 선택하고 IE 브라우저를 다시 시작합니다.

시대의 끝: Internet Explorer 11이 만료되었습니다. 알아야 할 사항은 다음과 같습니다. 시대의 끝: Internet Explorer 11이 만료되었습니다. 알아야 할 사항은 다음과 같습니다. Apr 20, 2023 pm 06:52 PM

2022년 6월 15일은 Microsoft가 IE11(Internet Explorer 11)에 대한 지원을 종료하고 레거시 브라우저 장을 마감하는 날입니다. 회사는 한동안 사용자에게 이 수명 종료 날짜를 상기시키고 Microsoft Edge로의 전환을 계획할 것을 촉구해 왔습니다. Microsoft는 Windows용 최신 기본 웹 브라우저로 IE11을 Windows 8.1에 번들로 제공합니다. 비록 (현재의) Chrome 수준에는 도달하지 못했지만 2014년에는 IE8에 이어 두 번째로 많이 사용된 데스크톱 브라우저였습니다. 물론 20으로

IE 바로가기가 삭제되지 않는 문제 해결 방법 IE 바로가기가 삭제되지 않는 문제 해결 방법 Jan 29, 2024 pm 04:48 PM

삭제할 수 없는 IE 바로가기 해결 방법: 1. 권한 문제, 3. 소프트웨어 충돌, 5. 악성 소프트웨어, 7. IE 재설치, 9. 바로가기의 대상 경로를 확인하세요. 10. 다른 요소를 고려하세요. 11. 전문가에게 문의하세요. 자세한 소개: 1. 권한 문제, 바로가기를 마우스 오른쪽 버튼으로 클릭하고 "보안" 탭에서 "속성"을 선택한 후 바로가기를 삭제할 수 있는 권한이 있는지 확인하세요. 그렇지 않은 경우 관리자로 실행해 보세요. .

See all articles