2
我有一些代碼,看起來像這樣:如果我在調用異步函數後調用它,爲什麼我的Observer訂戶沒有運行?
async function promptHandler(source) {
source.subscribe(function(line) {
console.log(`line == ${line}`);
});
let matchingTests = await getMatchingTests('ROGL');
}
這樣就會打印出source
可觀的,這是聽txt
文件的ReadStream
的內容。當上面的函數被調用時,我會看到文件的輸出。但是,如果我叫subscribe()
後getMatchingTests()
被調用,就像這樣:
async function promptHandler(source) {
let matchingTests = await getMatchingTests('ROGL');
source.subscribe(function(line) {
console.log(`line == ${line}`);
});
}
我沒有看到txt文件的內容。我知道matchingTests變量包含getMatchingTests
的成功結果,所以我不認爲它會阻止Node執行該行。
我在猜測getMatchingTests
異步函數調用與source
Observable有關,但我沒有看到如何。
這裏是我的source
代碼:
let fileStream = createReadStream(file)
.pipe(split());
let source = new Observable(o => {
fileStream.on('data', line => {console.log('data'); o.next(line);});
fileStream.on('error', err => o.error(err));
fileStream.on('end',() => {console.log('end'); o.complete();});
});
你能發佈可觀察源代碼嗎?也許這可能有助於理解 – user3743222
發生了什麼,但是您是否仍然在控制檯中爲文件的每一行打印了「data」?如果你這樣做了,但你沒有看到像'line === ...'這樣的文本,那麼你的訂閱操作肯定發生得太晚了。參看我的答案。 – user3743222
我沒有看到''data''或'line === ...' –