楊魅力
2020-02-03 15:01:18
之間有什么區(qū)別?new Promise(function(res, rej) { res("aaa"); }) .then(function(result) { return "bbb"; }) .then(function(result) { console.log(result); });還有這個(gè):new Promise(function(res, rej) { res("aaa"); }) .then(function(result) { return Promise.resolve("bbb"); }) .then(function(result) { console.log(result); });我問的是我正在使用Angular和$ http服務(wù)以及鏈接.then()時(shí)出現(xiàn)不同的行為。因此,代碼太多了,因此首先是上面的示例。
3 回答

守著一只汪
TA貢獻(xiàn)1872條經(jīng)驗(yàn) 獲得超4個(gè)贊
您的兩個(gè)示例的行為應(yīng)該幾乎相同。
在then()處理程序內(nèi)返回的值將成為從該處理程序返回的promise的分辨率值then()。如果在內(nèi)部返回的值.then 是一個(gè)承諾,則所返回的承諾then()將“采用該承諾的狀態(tài)”,并像返回的承諾一樣進(jìn)行解析/拒絕。
在第一個(gè)示例中,您返回"bbb"第一個(gè)then()處理程序,因此"bbb"將其傳遞給下一個(gè)then()處理程序。
在第二個(gè)示例中,您返回一個(gè)Promise,該P(yáng)romise立即用value解析"bbb",因此"bbb"被傳遞到下一個(gè)then()處理程序中。(Promise.resolve()這里是多余的)。
結(jié)果是一樣的。
如果您可以向我們展示一個(gè)實(shí)際表現(xiàn)出不同行為的示例,那么我們可以告訴您為什么會(huì)發(fā)生這種情況。
添加回答
舉報(bào)
0/150
提交
取消