Hỏi về cách return giá trị?
-
Mọi người giúp mình cách giá trị images trả về từ trong hàm sharp với.
Đã thử images = sharp(...) nhưng nó trả về giá trị của sharp chứ không phải imagesvar images = null; sharp(imageFile.data) .resize(700) .jpeg() .toFile('./public/images/images/700_'+slug+'.jpg', function(err, info) { return images = { image: { width: info.width, height: info.height, url: 'images/images/700_'+ slug + '.jpg', webpUrl: 'images/images/700_'+ slug + '.webp', } } } ); console.log(images);
-
@Kha-Pham Nếu bạn đang dùng NodeJS 8+, bạn có thể dùng async/await
var info = await sharp(imageFile.data) .resize(700) .jpeg() .toFile('./public/images/images/700_'+slug+'.jpg'); var image = { width: info.width, height: info.height, url: 'images/images/700_'+ slug + '.jpg', webpUrl: 'images/images/700_'+ slug + '.webp', }
NodeJS < 8 thì dùng Promise
return new Promise((resolve, reject) => { sharp(imageFile.data) .resize(700) .jpeg() .toFile('./public/images/images/700_'+slug+'.jpg', function(err, info) { if (err) { reject(err); } resolve({ width: info.width, height: info.height, url: 'images/images/700_'+ slug + '.jpg', webpUrl: 'images/images/700_'+ slug + '.webp', }); }); })
Bạn nên học thêm về khái niệm về async/await và promise trong JavaScript trước.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
-
@Kha-Pham said in Hỏi về cách return giá trị?:
Đã thử images = sharp(...) nhưng nó trả về giá trị của sharp chứ không phải images
Này là vấn đề về output của function bạn cần check. Ở đoạn code mình thấy bạn complex giữ async và sync data. Về cơ bản bạn đang xử lí data image trong function callback đó luôn. Hoặc đưa nó thành promise / hoặc nữa bọc nó trong wait.for hay async/await để lấy dữ liệu về.
-
@Quy-Tran cám ơn bạn đã trả lời. dùng promise va await thì ok. tại mình đang đặt câu đó trong switch. nhưng cám ơn bạn
-
@Nguyen-Hien chuyển sang promise là thanh công