2016-03-08 5 views
0

Я играю с Rx.js, и я хочу запустить два обещания, которые создают каталог, и тот, который делает HTTP-запрос, принимает один параметр user. Как бы связать эти две вещи вместе?Запустите два обещания, что тот же параметр

const GITHUB_USER = 'reggi' 

let repos = Rx.Observable.just(GITHUB_USER) 
    .map(user => { 
    return createDir(user) 
    }) 
    .map(user => { 
    return getRepos(user) 
    }) 
+0

что ваша проблема? Является ли это для повторного использования переменной 'user' или для объединения обещаний? Цепочка на два обещания проста - просто наведите их на карту. Чтобы повторно использовать переменную 'user', просто передайте ее следующему вызову. Или вы ищете элегантный способ сделать это? – user3743222

+0

Что произойдет в этой программе, что приведет к созданию каталога или созданию http-запроса? – jamesRH

ответ

0

flatMap оператор позволяет «сгладить» наблюдаемом Обещания (т.е. преобразовать поток Обещания, что решить что-то, чтобы просто поток устраненных данных):

const GITHUB_USER = 'reggi' 

// repos$ is a stream that will resolve the user's repositories 
// once the directory is created. 
let repos$ = Rx.Observable.just(GITHUB_USER) 
    .flatMap(user => { 
    // Return a Promise that resolves the user 
    return createDir(user).then(() => user); 
    }) 
    .flatMap(user => { 
    // Return a Promise that resolves the repos 
    return getRepos(user) 
    }); 
+0

Спасибо! В этом случае createDir не возвращает пользователя снова. :( – ThomasReggi

+0

Обновлено, так что обещание createDir заканчивается решением пользователя, вызывая 'then'. –

0

Что вы могли сделать, это обмануть немного:

let repos = Rx.Observable.just(GITHUB_USER) 
    .map(user => { 
    return createDir(user).then(res_cd => { 
     return getRepos(user); 
    }); 
    }) 
    .then(res => {...}) 

Это не идеальный, но он будет работать.

Смежные вопросы