2016-12-28 14 views
0

以下のアウトラインでは、2つの簡単なステップでコンソールに何かを表示し、最初のステップが完了した後に何か別のものを表示する約束を示しています。JavaScriptの約束を解決する

私は約束を解決する方法を理解しようとしており、2番目のステップを完了できるようにしています。あなたは「延期作成することができますq、として、他の約束の実装があります

new Promise((resolve, reject) => { 
    makeAjaxCall((err, data) => { 
     if(err) return reject(err); 
     else return resolve(data); 
    }) 
}); 

など:通常、あなたのような、約束の中にいくつかの非同期関数をラップしたいときにnew Promise()を使用

var lookup_documents = new Promise(
    function(resolve, reject) { 
     console.log("1st"); 
     //resolve(); - How do I do this outside of this function? 
    } 

); 

lookup_documents.then(
    function() { 
     console.log("2nd"); 
    } 
); 
+0

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise –

+0

あなたは「機能の外」とはどういう意味ですか?貴方はするべきではない。その機能の中で最初のステップを実行してください。 – Bergi

答えて

0

「約束を返すオブジェクトが...似た何かが次のようになります。あなたが望む特定のものについては

function makeAjaxCallPromise() { 
    let deferred = Q.defer(); 
    makeAjaxCall((err, data) => { 
     if(err) return deferred.reject(err); 
     else return deferred.resolve(data); 
    }); 
    return deferred.promise; 
} 

...私は考えることができるすべてが宣言しています変数の約束関数のスコープの外で、それをasign、のようなもの:

let resolver, rejecter; 
new Promise((resolve, reject) => { 
    resolver = resolve; 
    rejecter = reject; 
}); 
makeAjaxCall((err, data) => { 
    if(err) return resolver(err); 
    else return rejecter(data); 
}); 

しかし、それはあまりにも良い見ていないとエラーにつながることができます...あなたの約束の機能のすべてを包むようにしてください。

0

私はあなたを正しく理解していれば、あなたの例を使ってこのようにすることができます。

var lookup_documents = function() { 
    return new Promise(function(resolve, reject) { 
    console.log("1st"); 
    resolve(); 
    }); 
}; 

lookup_documents().then(function() { 
    console.log("2nd"); 
}); 
+0

これは完璧で、うまく機能しています。ここでさらに明確にするために、私はAPI呼び出しを行った約束の最初の部分で関数を呼び出そうとしていて、APIが完了した後(別の関数で)約束の最初の部分を解決したいと考えました。 –

+0

あなたはそれを理解できましたか?さもなければ、私はその答えを解決することができます。 –

+0

私は上記の提案をとり、約束の最初の部分にAPIを置き、API呼び出しの完了時に解決しました。 API呼び出しを開始するには、ここで提供されている2番目のコードを使用して、約束の最初の部分の解決に基づいて実行するコマンドを挿入します。 - ありがとう、これは私の一日を作った! –

関連する問題