2014-02-26 80 views
3

此功能如何使用錯誤的highland.js地圖

var _ = require('highland'); 
var accounts = ['ack', 'bar', 'foo']; 

_(accounts).map(function (x) { 
    return new Error(x); 
}).errors(function (err, push) { 
    push(null, 'fark'); 
}).each(function (x) { 
    console.log(x); 
}); 

日誌

[Error: ack] 
[Error: bar] 
[Error: foo] 

我預期登錄

fark 
fark 
fark 

我如何使用錯誤正確高地。 JS?

回答

0

documentation你有這樣的:

getDocument.errors(function (err, push) { 
    if (err.statusCode === 404) { 
     // not found, return empty doc 
     push(null, {}); 
    } 
    else { 
     // otherwise, re-throw the error 
     push(err); 
    } 
}); 

因此,我認爲你的錯誤仍然在下面一行:

push(null, 'fark'); 

嘗試

push(err); 

希望這有助於你!

+0

我其實是試圖重建'if'聲明,它會得到一個錯誤,並推動不同的值,而不是傳播錯誤本身。對於這個庫中的錯誤如何工作,我仍然很不安。 – Jehan

1

閱讀http://highlandjs.org/#map鏈接的map函數的源代碼,你可以看到該功能應用於這樣的:

var fnVal, fnErr; 
try { 
    fnVal = f(x); 
} catch (e) { 
    fnErr = e; 
} 
push(fnErr, fnVal); 

所以如果你想通過map變壓器的值轉換成高原StreamError,你需要拋出錯誤。

下面的代碼:

var _ = require('highland'); 
var accounts = ['ack', 'bar', 'foo']; 

_(accounts).map(function (x) { 
    throw new Error(x); 
}).errors(function (err, push) { 
    push(null, 'fark'); 
}).each(function (x) { 
    console.log(x); 
}); 

會給你預期

fark 
fark 
fark