Are JavaScript forever-pending promises bad?

前端 未结 2 1432
盖世英雄少女心
盖世英雄少女心 2020-12-06 12:10

Say I have a promise called myProm, and say I have success and error handlers called onSuccess and onError.

Whenever my promis

2条回答
  •  醉酒成梦
    2020-12-06 12:44

    You can use Promise.race(), set timeoutHandler as a function which returns a rejected a Promise in ten seconds, else onSuccess should be called at fulfilled Promise of myProm

    function myProm() {
      return new Promise((success, err) => {
        setTimeout(() => {
          success("myProm")
        }, Math.floor(Math.random() * 11000))
      })
    }
    
    function timeoutHandler() {
      return new Promise((_, timeout) => {
        setTimeout(() => {
          timeout(new Error("timeoutHandler"));
        }, 10000)
      })
    }
    
    function onSuccess(data) {
      console.log("success", data)
    }
    
    function onError(err) {
      console.log("err:", err)
    }
    
    function onTimeout(e) {
      if (e.message && e.message === "timeoutHandler") {
        console.log(e.message + " handled");
      }
      else { 
        onError(e)
      }
    }
    
    Promise.race([myProm(), timeoutHandler()])
    .then(onSuccess, onTimeout);

    plnkr http://plnkr.co/edit/9UD5syOEOc1oQGdRTRRm?p=preview

提交回复
热议问题