2017-05-11 10 views
0

私は既存のJavaScriptコードをリファクタリングする必要があります。これには、検証ライブラリといくつかのエディタが含まれます。私はプロミスと仕事をすることで新しいです。古いコードは次のとおりです(簡略化)。bluebird約束とイベント

$this.bind("validation.validation", function (event, params) { 
    var value, 
     errorsFound = []; 
    value = params.editor.getValue(); 
    $.each(validators, function (i, validator) { 
    if (validator.validate(value)) { 
     errorsFound.push(validator.getErrMsg()); 
    } 
    }); 
    return errorsFound; 
}); 

イベントvalidation.validationが多くの場所でトリガーされます。返される配列にはエラーメッセージが含まれます。 エディタは完全に新しく、getValue()で値を返しませんが、Promiseを返します。

$this.bind("validation.validation", function (event, params) { 
    var errorsFound = []; 
    params.editor.read().then(function (value) { 
    $.each(validators, function (i, validator) { 
     if (validator.validate(value)) { 
     errorsFound.push(validator.getErrMsg()); 
     } 
    }); 
    return errorsFound; 
    }); 
    // return ??? what ??? 
}); 

可能であれば、この検証コードの完全なリファクタリングを避けることを望みます。しかし、どのようにイベントハンドラが非同期のものを返すことができますか?これも可能ですか?

ありがとうございます

答えて

1

あなたはプロミスを返す必要があります。次に、呼び出しコードはPromiseを理解し、Promiseが解決した後に値を取得する必要があります。そうでなければ、できることはあまりありません。 ES6でAsync/Awaitのようなものがなければ。

関連する問題