Promise.race() 비동기식 시간 초과 처리

11372 단어
function timeoutPromise(promise, ms){
    var timeout = new Promise(function(resolve,reject){
        setTimeout(function(){
            reject(" ")
        },ms);
    })
    return Promise.race([promise, timeout]);
}
// 
var taskPromise = new Promise(function(resolve){
    // 
    var delay = Math.random() * 2000;
    setTimeout(function(){
        resolve(delay + "ms");
    },delay)
})
timeoutPromise(taskPromise, 1000).then(function(value){
    console.log("taskPromise :" + value);
}).catch(function(error){
    if(error){
        console.log(error);
    }
})

이 예는 이 글을 보고 나서 생각한 자각이 원례보다 더 간단한 실현 방식이다.어떤 부분은 고려하지 않았을 수도 있습니다. 시정을 환영합니다!예:
function delayPromise(ms){
    return new Promise(function(resolve){
        setTimeout(resolve,ms);
    })
}
function timeoutPromise(promise, ms){
    var timeout = delayPromise(ms).then(function(){
        throw new Error('Operation timed out after ' + ms + 'ms');
    });
    return Promise.race([promise, timeout]);
}
// 
var taskPromise = new Promise(function(resolve){
    // 
    var delay = Math.random() * 2000;
    setTimeout(function(){
        resolve(delay + "ms");
    },delay)
})
timeoutPromise(taskPromise, 1000).then(function(value){
    console.log("taskPromise :" + value);
}).catch(function(error){
    console.log(" ", error);
})

이 안의 시간 초과 처리 함수 중promise은 최종적으로 resolve 호출되고 수동으로 하나Error를 던져 바깥promise 호출reject을 리셋하고 Promise.race() 촉발reject.나는 작가가 어떤 요소를 고려해서 수동으로 오류를 던지는 방법을 생각했는지 모르겠다. 나는 첫 번째 Promise 호출reject을 직접 호출하여 뒤에 연결된 일련의 조작을 느꼈다.

좋은 웹페이지 즐겨찾기