我現在有這一段代碼()方法Promisify應用使用未知數目輸入變量的
let multiplyTwoNum = (foo, bar, cb) => {
cb(null, foo * bar)
}
let multiplyThreeNum = (foo, bar, param, cb) => {
cb(null, foo * bar * param)
}
function multiplyAnyNumbers(f) {
f.apply(null, Array().slice.call(arguments, 1));
}
上面定義了乘上傳遞的數字給他們,並通過回調返回值的兩個基本功能
現在我可以調用這兩個函數,如下所示。一切都很好,直到這一點。回調確實變得複雜得多,我希望multiplyAnyNumber返回一個Promise。
multiplyAnyNumbers(multiplyTwoNum, 1, 2, (err, val) => {
console.log(err) // Shows undefined
console.log(val) // Shows 2
});
multiplyAnyNumbers(multiplyThreeNum, 1, 2, 3, (err, val) => {
console.log(err) // Shows undefined
console.log(val) // Shows 6
});
我想使用這樣的替代,這意味着回調函數在實際的函數調用不會被傳遞,並承諾,預計將返回
multiplyAnyNumbers(multiplyThreeNum, 1, 2, 3)
.then(data => console.log(data))
.catch(err => console.log(err))
multiplyAnyNumbers(multiplyTwoNum, 1, 2)
.then(data => console.log(data))
.catch(err => console.log(err))
我嘗試將導致錯誤說「cb不是函數」,指的是乘法函數中的第二行。
function multiplyAnyNumbersNew(f) {
let func = (err, val) => {
console.log(err);
console.log(val);
}
arguments[(arguments.length).toString()] = (err, val) => {
console.log(err);
console.log(val);
}
f.apply(null, Array().slice.call(arguments, 1));
}
我能夠返回一個承諾,因爲如果我要傳遞的回調,然後使用這個不減少代碼,我需要寫,因爲該塊是很重要的(〜40行)代碼在回調中。尋找任何建議,如果這個問題是模糊的,請讓我知道。謝謝!
爲什麼promisify'multiplyAnyNumbers'代替promisifying'multiplyTwoNum'和'multiplyThreeNum'? – Bergi
我沒有得到'multiplyAnyNumbers'的目的。你會在哪裏使用它並傳遞'f',而不是直接調用'f'? – Bergi
您是否使用任何特定的承諾庫?許多人都有你在船上尋找的工具。 – Bergi