2016-09-30 64 views
0

我是新来的承诺,并想了解什么是避免“回调地狱”与承诺的正确方式,因为我有完全相同的问题,因为使用回调如何通过承诺避免'回拨地狱'?

foo(a: number): Promise<boolean>{ 
    return doSomething(a).then((b)=>{ 
     return doAnotherThing(b).then((c)=>{ 
      return true; 
     }) 
    }) 
} 

只要看看这个金字塔..

你怎么能避免这种情况?

在此先感谢

+0

@Mijago使用的NodeJS –

+0

'返回doSomething的(一个)。然后(doAnotherThing)。然后(C =>真)' – Bergi

回答

1

你可以做一个承诺返回一个承诺(或任何其他值),则链与.then()

foo(a: number): Promise<boolean>{ 
    return doSomething(a).then((b)=>{ 
     return doAnotherThing(b); 
    }).then((c)=>{ 
     return true; 
    }); 
} 
0

如果你使用babel,ES2015你可以使用await。

例如。

async function foo(a) { 
    var b = await doSomething(a); 
    var c = await doAnotherThing(b); 
    return true; 
} 

预设:ES2015,阶段3

+2

这不是ES2015。 – Bergi

+0

@Bergi你是否迂腐? – Keith

+0

是的,我是:-)如果你不想关心版本细节,可以称之为“ES next”或“ES harmony”。但异步/等待不是ES6的一部分(ES2015),所以请修复您的答案,并最好地链接相关的babel变压器,需要使用 – Bergi