LINUX.ORG.RU

вопрос по промисам

 


0

1

Не совсем понятно, зачем нужен второй параметр коллбэка, reject? Ведь если будет ошибка, она все равно окажется в catch


new Promise(function(resolve){a/*undefined var*/})
.catch(function(err){console.log(err)})

//>>>> [ReferenceError: a is not defined]

?

Ответ на: комментарий от xenohunter

Проблема с двумя callback'ами в `.then()` — в том, что второй не сможет отловить синхронную ошибку в первом.

Хватит людям голову морочить




fs=require("fs")
read=function(file){
 return fs.readFileSync(file, "ascii")
}
doFile=function(file){
 var s= read(file).replace(/.*/, "")
 eval(s)
}

doFile("/mlib/js/main")



var makeError = function(optionalErr){
   return function(resolve, reject){
   setTimeout(function(){
      if(optionalErr) reject(optionalErr)
      resolve("foo")
     })
   }
}

var makePromise = function(optionalErr){
   return new Promise(makeError(optionalErr))
}


var makeDataCatcter = function(error){
   return function(data){
      console.log(data)
      return makePromise(error)
   }
}

var errorCatcher = function(error){console.log(error)}

makePromise()
 .then(makeDataCatcter())
 .then(makeDataCatcter("error"))
 .then(makeDataCatcter())
 .then(makeDataCatcter(), errorCatcher)


makePromise()
 .then(makeDataCatcter())
 .then(makeDataCatcter("error"))
 .then(makeDataCatcter())
 .catch(errorCatcher)

new Promise(function(){
   syncError
})
 .then(makeDataCatcter("error"))
 .catch(errorCatcher)

new Promise(function(){
   syncError
})
 .then(makeDataCatcter("error"))
 .then(makeDataCatcter(), errorCatcher)

/*
[ReferenceError: syncError is not defined]
[ReferenceError: syncError is not defined]
foo
foo
foo
foo
error
error
*/

во всех случаях все работет одинаково, и правильно тебе сказали, что синхронный код тут вообще не при чем, и он нахрен не нужен в просисах.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.