這個問題在這里已經有了答案:
提前致謝。
uj5u.com熱心網友回復:
您的scanQR函式沒有回傳任何內容:因此,當您分配其回傳值時,您會得到undefined. 這是意料之中的。問題來自您試圖在僅異步觸發的回呼中回傳某些內容。
要解決此問題,您需要將內部邏輯包裝在一個 promise(回傳)中。然后,您可以根據代碼是否成功執行或拋出錯誤來解決/拒絕承諾:
const scanQR = (source) => {
// Wrap all logic inside a promise, which you return
return new Promise((resolve, reject) => {
const buffer = fs.readFileSync(source);
Jimp.read(buffer, (err, image) => {
try {
const qr = new QrCode();
qr.callback = (error, value) => {
try {
// Resolve promise here
resolve(value.result);
} catch(error) {
// Reject promise
reject(error);
}
}
qr.decode(image.bitmap);
} catch (error) {
reject(error);
}
});
});
}
使用模塊時,您需要使用.then():
const scanQR = require('./utils/scanQR');
const qr_code_screenshot = `${__dirname}/assets/images/qrcode-test.png`;
// `scanQR` returns a promise and you will need to use `.then()`
scanQR(qr_code_screenshot).then(data => console.log(data));
...或使用 async/await:這是多種方法之一:
const scanQR = require('./utils/scanQR');
async function scan(image) {
const result = await scanQR(image);
console.log(result);
}
scan(`${__dirname}/assets/images/qrcode-test.png`);
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/433500.html
標籤:javascript 节点.js 节点模块
