2 回答

TA貢獻(xiàn)1951條經(jīng)驗(yàn) 獲得超3個(gè)贊
JavaScript承諾是可互操作的。您可以根據(jù)需要混合使用它們,所有適當(dāng)?shù)膸?kù)1和本機(jī)承諾都可以接受來(lái)自任何地方3的任何實(shí)現(xiàn)的thenables 2。如果有外國(guó)人出現(xiàn),他們就會(huì)做。Promise.resolve
所以通常你會(huì)編寫你的代碼,好像它們都使用了相同的promise實(shí)現(xiàn),它只是起作用。
但是,現(xiàn)在您要確保所有.then
方法調(diào)用都使用您喜歡的實(shí)現(xiàn); 或者您想使用非標(biāo)準(zhǔn)方法或功能?對(duì)于這一點(diǎn),你必須明確地投下所有的承諾在其上直接調(diào)用方法 -而不是其他。
一些例子:
Promise.all([$.ajax(…), $.ajax(…)]).then(…); // just works!
$.ajax(…) // a jQuery promise.then(…) // so this would be jQuery `then`, which we don't want.
Promise.resolve($.ajax(…)) // explicit cast.then(function(data) { // native `then` return $.ajax(…); // just works!}) // returns a native promise still.catch(…) // so we can use its features
1:是的,jQuery是直到3.0版本其中一個(gè)
2:所有的jQuery deferreds和承諾是這樣thenables,雖然
3:真的無(wú)處不在你所期望的一個(gè)承諾,在Promise.resolve
,then
回調(diào)的返回值,Promise.all
參數(shù),...
添加回答
舉報(bào)