這是代碼
。const setError = ""/span>;
function validate() {
return new Promise((resolve, reject) => /span>{
const exp = RegExp("w @example.com")。test("[email protected]") 。
console.log(exp)。
if (!exp) {
setError = "Email Not Valid!"。
}
console.log("The value is" setError)。
if (setError != "") {
reject()。
} else {
resolve();
}
});
}
validate()
.then(() => {
console.log("Resolved"/span>)。
})
.catch(() => {
console.log("Rejected") 。
});
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
當我運行它時,我得到以下輸出,
false
被拒絕。
為什么validate函式里面的第二個console.log沒有執行呢?
uj5u.com熱心網友回復:
setError不應該是一個常量,當你試圖改變它的值時,它會拋出一個錯誤并拒絕Promise。
let setError = ""。
uj5u.com熱心網友回復:
因為你正在賦值給const setError,它會導致運行時錯誤并停止函式執行。
const在初始化后不能被重新賦值。
let setError = ""/span>;
function validate(){
return new Promise((resolve, reject) => /span>{
const exp = RegExp("w @example.com")。test("[email protected]") 。
console.log(exp)。
if (!exp) {
setError = "Email Not Valid!"。
}
console.log("The value is" setError)。
if (setError != "") {
reject()。
} else {
resolve();
}
});
}
validate()
.then(() => {
console.log("Resolved"/span>)。
})
.catch(() => {
console.log("Rejected") 。
});
<iframe name="sif2" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
CodePudding
第二個console.log沒有啟動,因為setError是一個常量,不能被改變。將const改為let應該會產生你所期望的輸出:
false
The value isEmail Not Valid!
被拒絕!
uj5u.com熱心網友回復:
你沒有看到第二個console.log的原因是setError是一個const,所以只要你試圖給它分配一個新的值,它就會拋出一個錯誤,它將進入catch塊。
請嘗試這樣做:
var setError = ""/span>;
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/321052.html
標籤:
