배열 반복을 통해 Promise를 통해 순차적으로 매개변수 전달
다음 작업을 고려하세요.
var myArray = [1, 2, 3, 4, 5, 6]</p> <p>function myPromise(num){<br> return new Promise(res => {</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">window.setTimeout(()=>{ res( console.log("done: " + num) ) },2000)
})
}
myPromise(myArray[0])
.then(x => myPromise(myArray[1]))
.then(x => myPromise(myArray[2]) )
.then(x => myPromise(myArray[3]))
.then(x => myPromise(myArray[4]))
.then(x => myPromise(myArray) [5]))
위와 같은 코드는 Promise를 순차적으로 실행합니다. 그러나 배열이 동적으로 채워지면 각 멤버에 대해 myPromise()를 실행하는 것이 어려워집니다.
Promises를 사용한 일시 중지 가능한 반복
실행하는 "일시 중지 가능한 루프"를 생성하려면 계속하기 전에 해결을 기다리는 myPromise():
Fold 메서드
myArray.reduce( (p, x) => p.then(() => myPromise(x)), Promise.resolve() )
이 메서드는 배열 요소만큼 많은 Promise를 생성하지만 다음과 같은 경우에는 깔끔한 솔루션입니다. 이는 허용됩니다.
비동기 함수 방법
const forEachSeries = async (iterable, action) => { for (const x of iterable) { await action(x) } } forEachSeries(myArray, myPromise)
비동기 함수는 더 읽기 쉽고 메모리 효율적인 솔루션을 제공합니다.
수집 반환 값
반환 값을 배열로 수집하려는 경우:
const mapSeries = async (iterable, fn) => { const results = [] for (const x of iterable) { results.push(await fn(x)) } return results }
또는 비동기 기능 지원이 없는 경우:
const mapSeries = (iterable, fn) => { const iterator = iterable[Symbol.iterator]() const results = [] const go = () => { const {value, done} = iterator.next() if (done) { return results } return fn(value).then(mapped => { results.push(mapped) return go() }) } return Promise.resolve().then(go) }
사용 예
forEachSeries 메서드를 사용하는 실행 가능한 코드 조각:
const myArray = [1, 2, 3, 4, 5, 6] const sleep = ms => new Promise(res => { setTimeout(res, ms) }) const myPromise = num => sleep(500).then(() => { console.log('done: ' + num) }) const forEachSeries = async (iterable, action) => { for (const x of iterable) { await action(x) } } forEachSeries(myArray, myPromise) .then(() => { console.log('all done!') })
위 내용은 배열 반복을 통해 약속을 통해 매개변수를 순차적으로 전달하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!