如何根据呼叫站点返回功能或承诺?

时间:2016-09-01 16:53:58

标签: javascript promise

我想知道你是否有一些干净的方法来创建一个函数,当它自己调用时返回一个promise,并在.then中链接时返回一个函数。

示例:

// returns a promise. use to start chains: 
// eg: wait(400).then(...)
const wait_p = (t) => new Promise( resolve =>  setTimeout( resolve, t) );

// returns a function: use inside .then(): 
// eg: $get('whatever').then(wait_f(300))
const wait_f = (t) => () => wait_p(t)

在单个wait()函数中合并wait_p和wait_f的最简洁方法是什么?

//hypotetically:
const put = (x) => () => console.log(x) 
wait(1000)
  .then(put('one'))
  .then(wait(1000))
  .then(put('two'))

2 个答案:

答案 0 :(得分:2)

具有精神分裂症功能可能不是一个好主意,即使你可以弄清楚如何去做。选择一个并使用它。之一:

wait_f(1000)().then(wait_f(1000))...

wait_p(1000).then(() => wait_p(1000))...

就我个人而言,我经常使用像wait_f这样的函数,但我很少发现自己想用它来创建一个承诺链。

答案 1 :(得分:1)

我猜你可以使用then方法返回一个函数:

const wait = t => {
  var p = new Promise(resolve => setTimeout(resolve,t));
  var func = () => p;
  func.then = (...args) => p.then(...args);
  return func;
}
wait(400).then(() => console.log('Hello'))
Promise.resolve().then(wait(500)).then(() => console.log('World'))