Alibaba 가을 모집 전단 시험 문제

1436 단어 자바 script
머리말
이것 은 Promise 에 관 한 제목 이다.그동안 복습 한 Promise 에 대한 내용 을 거의 잊 어 버 리 지 않 은 데다 평소 적 게 써 서 제출 할 때 반제품 만 냈 다.이제 제 답 을 여기에 기록 하 겠 습 니 다.
원제
const timeout = ms => new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve();
    }, ms);
});

const ajax1 = () => timeout(2000).then(() => {
    console.log('1');
    return 1;
});


const ajax2 = () => timeout(1000).then(() => {
    console.log('2');
    return 2;
});

const ajax3 = () => timeout(2000).then(() => {
    console.log('3');
    return 3;
});

const mergePromise = ajaxArray => {
    //          
};

// mergePromise([ajax1, ajax2, ajax3])

mergePromise([ajax1, ajax2, ajax3]).then(data => {
    console.log('done');
    console.log(data); // data   [1, 2, 3]
});




//     
// 1
// 2
// 3
// done
// [1, 2, 3]

나의 답
const mergePromise = ajaxArray => {
    //          
    return new Promise((resolve,reject) => {

        ajaxArray.push(Promise.resolve(() => null));
        let data = [],
        arrLen = ajaxArray.length - 1;

        ajaxArray.reduce((calc,cur,index) => {
            return calc.then((res) => {
                res !== undefined?data.push(res):null;
                return index !== arrLen?cur():resolve(data);
            });
        },Promise.resolve());
    });
};

좀 더 우아 한 해결책 이 있 을 것 같 아 요.

좋은 웹페이지 즐겨찾기