2016-09-30 67 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