0

PropertyAJAX リクエストを発火させているものがあります。ただし、ケース404に到達したら、このストリームを終了したいのですが、その方法がわかりません。以下はコードです:

// load :: EventStream (Int -> Int)
load = $("#loadimg")
    .asEventStream("click")
    .map(function(e){ return function(x){ return x + 1 }})

// loadP :: Property Int
loadP = load.scan(1, function(x,f){ return f(x) })

// loadImg :: Property (HttpRequest -> Either String String)
loadImg = loadP
    .flatMapLatest(function(i){ return Bacon.fromPromise(imgLoader(i) )})
    .mapError("")

// imgLoader :: Int -> HttpRequest String
imgLoader = function(id){

    // pretend src, root and fmt are global variables
    var url = src + root + id + fmt

    return $.ajax({ 
        type   : "GET",
        url    : url,
    })
    .then(function(ys){ return url })

}

// EventStreamT (State Dom) String
loadImg.onValue(function(url){

    if (url.length == 0) return url        
    else return appendImg("#imgs", "name", url);

})

この「ベーコン プロパティを中止する」コードを、副作用がある最後の関数に配置するのは意味がありませんが、他にどこで404ケースをテストしますか? そして、どうすればスレッドを終了できますか?

4

2 に答える 2

2

Bacon.js 0.6.17 では述語関数を に渡すことがendOnErrorできるので、

loadImg = loadP .flatMapLatest(function(i){ return Bacon.fromPromise(imgLoader(i) )}) .endOnError(function(error) { return error.status == 404 })

于 2013-09-12T06:59:08.447 に答える
1

.endOnError()エラーで終了する代わりに、単に言うことができ.mapError("")ます。

エラータイプごとにより具体的な処理が必要な場合は、次のことができます

loadImg404 = loadImg.mapError(".status").filter(function(status) { return status==404 })
...
loadImg.takeUntil(loadImg404).onValue(..)
于 2013-09-12T06:31:39.633 に答える