1

次のコードを使用します。

function cancelChanges() {
    if (datacontext.manager.hasChanges()) {
        return datacontext.manager.rejectChanges();
    } else {
        console.log("No changes to save");
    }
}

私はこのようにそれを呼び出す場合:

         cancelChanges()
                .then(function () {
                    console.log("Changes Cancelled");
                })

「オブジェクトにはメソッド 'then' がありません」というメッセージが表示されます。を使用するsaveChangesと動作します。これに関するもう 1 つの問題は、elseステートメントが何も返さないため、.thenand.fail呼び出しでエラーが発生することです...これを修正してプロミスを使用するにはどうすればよいでしょうか?

4

3 に答える 3

3

Breeze は、非同期メソッドの promise のみを返します。これは仕様によるものです。しかし、別のポスターが指摘しているように、すでに実現した結果からいつでも約束を構築できます。

于 2013-08-08T17:56:08.240 に答える
2

$qangularのサービスを使用して、独自のプロミスを作成できます。

 function cancelChanges() {
    var deferred = $q.defer();
    if (datacontext.manager.hasChanges()) {
        datacontext.manager.rejectChanges();
        deferred.resolve("Changes Cancelled");
    } else {
        deferred.reject("No changes to save");
    }
    return deferred.promise;
 }

    cancelChanges()
            .then(function (result) {
                console.log(result);
            })
于 2013-08-08T16:50:46.120 に答える
0

cancelChanges以下は、 Jonathan Palumbo (正しい考えを持っている) が提案した、もう少し経済的な構文です。

 function cancelChanges() {
    if (datacontext.manager.hasChanges()) {
        datacontext.manager.rejectChanges();
        return $q.when("Changes Cancelled");
    } 
    return $q.reject("No changes to save");
 }

$q の API ドキュメントを参照してください。

PS:キャンセルする変更がない場合に、その成功パスを返すのではなく、メソッドを失敗させたい理由が少しわかりません。なぜこれが非同期メソッドなのか理解できません。あなたにはあなたの理由があると思います。

于 2013-08-09T16:03:20.673 に答える