2016-08-23 68 views
0

在下面的代碼中,Promise.reject不起作用,除非我專門使用return Promise.reject(...)。爲什麼是這樣?爲什麼Promise.reject()需要返回?

Promise.resolve('Promise 1 Done') 
.then(function(result) { 
    console.log(result); 
    return 'Promise 2 Done' 
}).then(function(result) { 
    let j; 
    try { 
    j = JSON.parse("invalid will throw"); 
    console.log(j); 
    } catch(err) { 
    Promise.reject('Could not parse JSON'); 
    } 

    console.log(result); 
}).catch(function(err) { 
    console.log(err); 
}); 
+0

什麼叫「不工作」是什麼意思? – martriay

回答

1

Promise.reject產生一個值,它不拋出一個由像throw確實功能打破了異常。如果沒有return那個值,它將被忽略並且控制流程繼續。

假設你是一個承諾回調裏面,你可以(並且可能應該)改用

throw new Error('Could not parse JSON'); 
+0

或者用'return Promise.reject('Could not parse JSON')'返回被拒絕的承諾;'。 – jfriend00

+0

@ jfriend00:OP知道已經是,所以是:-)但是[不要忘記在'Error']中包裝消息(http://stackoverflow.com/q/26020578/1048572)。 – Bergi

+1

我並不認爲你的回答說明瞭在這種情況下可用的兩種選擇,這對其他讀者也是有用的。只是建議改進。 OP也可能會對承諾構造函數中的拒絕調用與這種情況之間的差異感到困惑。 – jfriend00

相關問題