2017-08-04 10 views
0

私はサービスを持っています。これは文字列 "B"を返します。 は、私は、次のコントローラを持っている:約束を待たずに返信する

$scope.output; 
var someVariable = 'A'; 

$scope.setUpConnection = function (someVariable) { 
    $scope.output = createConnection(someVariable); 
    console.log($scope.output); 
} 

createConnection = function (someVariable) { 
    var result; 
    service.connect(someVariable).then(function success(response) { 
     result = response.data; 
    }, function error(response) { 
     result = 'Error' + response; 
    }); 
    return result; 
} 

のcreateConnection()関数ではない、.thenを待って何も返さない、そのようにundefinedを返し、関数の終わりにジャンプします。誰かがなぜそれが終わることを約束するのを待っていないのか説明できますか?

サービスは、私が直接

$scope.output = response.data; 

とリターンを交換する場合、それは正常に動作し、問題はありません。問題とそれがこのように設定されている理由は、それを動かすとすぐに別のJSファイルでcreateConnection()関数が実行されるため、上記の解決策は機能しません。そういうわけで、私はreturn文が必要だと思った。

+1

可能性のある重複した内部の約束アンラップする必要がある[私は非同期呼び出しからの応答を返すにはどうすればよいですか?](https://stackoverflow.com/questions/14220321/how-do-i-非同期呼び出しからの返信) – Liam

答えて

1

返信時にresult約束が解決されないため、これは機能しません。あなたはのsetUpConnection

$scope.setUpConnection = function (someVariable) { 
    service.connect(someVariable).then(function success(response) { 
     $scope.output = response.data; 
    }, function error(response) { 
     $scope.output = 'Error' + response; 
    }); 
} 
+0

しかし、この機能は、他のさまざまなコントローラによって呼び出されます。これらのコントローラのそれぞれにsetUpConnection関数を記述する必要があるのは少し冗長かもしれません。なぜ私はリターンステートメントを目指していたのですか?それ以来、さまざまなコントローラーの変数をいっぱいに書き込むことができました。 – Patrick

+0

次に、約束が解決された後に応答を返すコールバックメソッドを作成できます –

関連する問題