2017-10-04 18 views
-2

私はいくつかの簡単なことをしたい。Javascriptで未定義の戻り値を処理する方法は?

func1(x).then(func2)

私は任意の(はい、この場合はfunc1リターンundefinedfunc1から値を返さ使用することはありません、と私はちょうど私がundefinedので、それを行うとしていますか、func1func2を実行したいですプロパティthenはありませんか?

ありがとうございます!

+1

を「第二の機能は動作しますが 'どのような方法でfunc1'非同期ですか...? – deceze

+0

func1はPromiseを返さなければなりません.. – Keith

+0

@Keith私の質問は、約束を返せない場合、未定義の値からデフォルトのものを作成できますか? – xxx222

答えて

-1

func1の戻り値の型は約束ではない可能性があるため、func1を約束を返さなければならない新しい関数にラップする必要があります。

例:https://jsfiddle.net/kingychiu/gewm60as/

は、あなたが関数func1として、以下の機能を持っていると仮定し、それはブール値に基づいて約束または未定義を返します。

function I_will_return_promise_or_undefined(bool){ 
    if(bool){ 
     return new Promise(function(resolve, reject){ 
     resolve(null); 
    }); 
    }else{ 
     return undefined 
    } 
} 

あなたはfunc1のをこのようにラップすることができます:

function wrapper(bool){ 
    return new Promise(function(resolve, reject){ 
    var temp = I_will_return_promise_or_undefined(bool); 
    if(temp === undefined){ 
     // resolve it 
     resolve(undefined); 
    }else{ 
     // chain promise 
     temp.then(function(val){ 
     resolve(val) 
     }); 
    } 
    }); 
} 

最後にそれはあなたが望むものです。

// null 
wrapper(true).then(function(val){ 
    console.log(true, val); 
}); 

// undefinded 
wrapper(false).then(function(val){ 
    console.log(false, val); 
}) 
-1
function a(callbackFunction){ 
    console.log('The first function works'); 
    collbackFunction(); 
} 
function b(){ 
    console.log('The second function works'); 
} 
a(b); 

あなたがコンソールに表示されます。 初の機能が動作します 'と、新しい行に:

関連する問題