0

asyncを使用して関数を実装しても機能しません。常に即座に解決され、resultは常に未定義です。私はそれがとても働いていなかった理由を私は約束を使用して、それを書き直し、それが正常に動作し把握することができませんでしjavascript async/awaitバージョンとプロミスバージョンの関数が動作しない

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) 
    ) 
    }) 
} 

私の心の中でこれらの2つの実装は、(明らかにそうでない)同一でなければならないので、私は混乱しています。うまくいけば、それは明らかなことです。事前の感謝のおかげです。

+0

FWIW、あなたが必要としない 'ここに新しいPromise':あなただけvalidation.check''から始まるコードを返すことができます。 – lonesomeday

答えて

0

私は、1つのバージョンが結果を否定していて、もう1つはタイプミスではありませんでした。彼らは実際には、そのタイプミスとは別に、同じです!

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 
} 
関連する問題