2017-05-19 131 views
0

我有一個返回的函數承諾:等待方法的n個執行再繼續後完成

Setup.zoomIn() : Promise<void> {...} 

我想用rxjs來調用功能5次,每次之間1秒延遲,像這樣:

let obs = Observable.create(observer => { 
    let count = 0; 
    setTimeout(() => { 
    Setup.zoomIn(); 
    count++; 
    observer.next();   
    }, 1000); 
    if (count === 5) {observer.complete();} 
}; 

obs.subscribe(() => 
    console.log('zoomed out'); 
)}; 

只有和執行,只有當我想繼續執行,以進行進一步的步驟:

obs.toPromise.then(() => { 
    // do some stuff here but only after zoom has been invoked 5 times 
}) 

回答

0

爲zoomIns函數創建一個可觀察列表並將它們與另一個Observable連接起來。

function zoomIn(i) { 
    return new Promise(res => { 
    setTimeout(()=>res(i), 1000); 
}); 
}; 

function anotherPromise() { 
    return Rx.Observable.defer(()=> { 
    return new Promise(res => { 
    setTimeout(()=>res('anotherPromise'), 3000); 
    }); 
}); 
} 

const zoonInList = Array(5).fill(0).map((x, i)=>i).map(i=> 
    Rx.Observable.defer(()=> { 
    return zoomIn(i); 
}) 
); 

Rx.Observable.concat(...zoonInList, anotherPromise()) 
    .subscribe(x=>console.log(x)) 
相關問題