1 回答

TA貢獻(xiàn)1966條經(jīng)驗(yàn) 獲得超4個(gè)贊
我看到的是你的應(yīng)用程序完全不同步 - 我的意思是
你有saveImageToDisk(imageurl,filepath)它將文件寫入磁盤,但它執(zhí)行,將文件寫入隊(duì)列,aa,然后你用同步讀取(尚未保存)文件。
我將嘗試對(duì)它進(jìn)行一些修復(fù),以向您展示至少一種執(zhí)行此操作的方法 - 但在規(guī)劃應(yīng)用程序的流程時(shí),您需要考慮代碼中的一些同步。
console.log('Authenticating bot...');
const {Client, MessageAttachment} = require('discord.js');
const bot = new Client();
const tf = require('@tensorflow/tfjs-node');
const ts = require('@tensorflow/tfjs-core');
require('@tensorflow/tfjs-backend-cpu');
require('@tensorflow/tfjs-backend-webgl');
const coco = require('@tensorflow-models/coco-ssd');
const fs = require('fs');
const fetch = require("node-fetch");
const https = require('https');
const request = require('request');
bot.login('BOTTOKEN');
bot.on('ready', readyDiscord);
function readyDiscord() {
console.log('Authenticated and On!');
}
bot.on('message', gotMessage);
async function gotMessage(msg) {
if(msg.content === '!object') {
const attachments = (msg.attachments).array();
const filepath = "./images/" + Date.now() + "J" + ".jpg";
console.log(filepath);
const imageurl = attachments[0].url;
await saveImageToDisk(imageurl,filepath)
const img_buffer = fs.readFileSync(filepath)
const img = tf.node.decodeImage(img_buffer)
coco.load().then(model => {
// detect objects in the image.
model.detect(img).then(predictions => {
console.log('Predictions: ', predictions);
});
});
msg.reply('Enjoy');
msg.channel.send(attachments[0].url);
}
}
async function saveImageToDisk(url,path) {
return new Promise((resolve, reject) => {
var fullUrl = url;
var localPath = fs.createWriteStream(path);
var request = https.get(fullUrl,function(response) {
console.log(response)
response.pipe(localPath)
response.on('end', resolve);
}).on('error', reject);
});
}
這樣,在執(zhí)行讀取尚未填充的文件的代碼之前,代碼將等待,直到文件被寫入(或發(fā)生錯(cuò)誤) - 您當(dāng)然應(yīng)該嘗試捕獲錯(cuò)誤并處理它們。
添加回答
舉報(bào)