LINUX.ORG.RU

Смешной код

 , ,


1

2

Решил сравнить подходы к написанию кода в различных ЯП

actorScript Карла Хьюитта

(↓Future  slowProcedure∎[10, 20])+↓Future  slowProcedure∎[30, 40]
наш любимый JS


new Promise(function(resolve, reject){
  setTimeout(function(){
  try{
    resolve(slowProcedure(10, 20))
  }catch(e){
    reject(e)
  }})
 })
 .catch(function(e){console.log("first: " + e)})
 .then(function(x){
   return new Promise(function(resolve, reject){
     try{
       resolve(x + slowProcedure(30, 40))
     }catch(e){
       reject(e)
     }
   })
  })
 .catch(function(e){console.log("second: " + e)})
 .then(function(x){console.log(x)})


Это разве не смешно?



Последнее исправление: javaQest (всего исправлений: 2)

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

Хотя я хз, зачем

кстати, я нашел этой «фиче», не совсем обычное применение. Во первых, она обладает интересным свойством. Она опережает setImmediate и setTimeout с нулевым и дефолтным таймаутом

o ={
 a: 1,
 run1: function(){setImmediate(function(){console.log("run1: "+this.a)})},
 run2: function(){var a=this.a; setImmediate(function(){console.log("run2: "+a)})},
 run3: function(){Promise.resolve(this.a).then(function(x){console.log("run3: "+x)})}
}


o.run1()
o.run2()
o.run3()
console.log("foo")

//>>>foo
//>>>run3: 1
//>>>run1: undefined
//>>>run2: 1
во-вторых, оно годится для пробрасывания контекста, вместо лексических костылей, как видно в коде run3. Возможно, это все может где-нибудь пригодится.

javaQest
() автор топика
Ответ на: комментарий от javaQest

Эта «фича» зависима от браузера, поскольку полифиллится оно обычно через setTimeout, емнип. Хотя если тебе пофиг — можешь юзать.

x3al ★★★★★
()
Ответ на: комментарий от korvin_

Хм, не думал что core.async в clojure настолько скопирован с go:

(let [ch (chan)]
  (go (>! ch (slow-procedure 10 20)))
  (go (>! ch (slow-procedure 30 40)))
  (println (<!! ch) (<!! ch)))

holuiitipun
()
Ответ на: комментарий от javaQest

Дак ведь это в принципе невозможно. Годы идут, кретины все те же.

anonymous
()

Порекламирую тут Scala:

val f1 = Future { slowProcedure(10, 20) }
val f2 = Future { slowProcedure(30, 40) }
for { x <- f1; y <- f2 } yield x + y
dizza ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.