0

我實現了一個使用異步功能,它不起作用。它總是立即解決,並且result始終未定義。JavaScript異步/等待版本與Promise版本的功能不起作用

原來這裏是異步版本:

async function validateOne(item, type, state) { 
    const validation = VALIDATIONS[type] 
    const result = !(await validation.check(state[item.name].value, state)) 
    return result || validation.message 
} 

我無法弄清楚,爲什麼它不工作,所以我重寫了它使用的承諾,它工作正常。

function validateOne(item, type, state) { 
    const validation = VALIDATIONS[type] 
    return new Promise(resolve => { 
    validation.check(state[item.name].value, state).then(result => 
     resolve(result || validation.message) 
    ) 
    }) 
} 

我很困惑,因爲在我看來這兩個實現應該是相同的(顯然他們不是)。希望這是顯而易見的,預先感謝任何見解!

+0

FWIW,你不需要'這裏新Promise':你可以只返回從'validation.check'啓動代碼。 – lonesomeday

回答

0

沒關係,我有一個錯誤的地方,其中一個版本否定結果,另一個不是!事實上,除了那個錯字之外,它們是相同的!

1

我認爲你的async function包含一個不必要的邏輯而不是!運算符。嘗試:

async function validateOne(item, type, state) { 
    const validation = VALIDATIONS[type] 
    const result = await validation.check(state[item.name].value, state) 
    return result || validation.message 
} 

或者,這可以簡化爲:

async function validateOne(item, type, state) { 
    const validation = VALIDATIONS[type] 
    return (await validation.check(state[item.name].value, state)) || validation.message 
}