如何让 IPFS 在继续之前添加 await 等待?
How do I make the IPFS add await wait before proceeding?
await 不等待 IPFS 添加功能。
我正在尝试将文件添加到IPFS,然后输出一个JSON的HASH对应的文件名
但是 await 只是从不等待并输出一个空文件。(或者控制台记录一个未定义的)
const IPFS = require('ipfs-api');
const ipfs = new IPFS({ host: 'ipfs.infura.io', port: 5001, protocol: 'https' });
const fs = require('fs-extra');
const dir = 'D:/JTEST/';
let nameToHash = new Object();
function writeJSON() {
let output= JSON.stringify(nameToHash);
fs.writeFileSync('output.json', output);
}
async function addFile(data, filename){
await ipfs.add(data, (err, ipfsHash) =>{
console.log(ipfsHash);
nameToHash[filename] = ipfsHash[0]['hash'];
});
}
fs.readdir(dir, async (err, files) => {
if (err)
console.log(err);
else {
for(const file of files){
let data = fs.readFileSync(dir + file);
let a = await addFile(data, file);
console.log(nameToHash); //writeJSON();
}
}
})
从这里 ipfs-api
模块的文档:https://www.npmjs.com/package/ipfs-api,我看到这个模块的许多函数都使用回调样式。所以await
不等也是正常的。
为了使用async/await关键字,你应该promisify回调函数。
这篇文章可能会帮助您更好地理解:https://flaviocopes.com/node-promisify/
await 不等待 IPFS 添加功能。
我正在尝试将文件添加到IPFS,然后输出一个JSON的HASH对应的文件名
但是 await 只是从不等待并输出一个空文件。(或者控制台记录一个未定义的)
const IPFS = require('ipfs-api');
const ipfs = new IPFS({ host: 'ipfs.infura.io', port: 5001, protocol: 'https' });
const fs = require('fs-extra');
const dir = 'D:/JTEST/';
let nameToHash = new Object();
function writeJSON() {
let output= JSON.stringify(nameToHash);
fs.writeFileSync('output.json', output);
}
async function addFile(data, filename){
await ipfs.add(data, (err, ipfsHash) =>{
console.log(ipfsHash);
nameToHash[filename] = ipfsHash[0]['hash'];
});
}
fs.readdir(dir, async (err, files) => {
if (err)
console.log(err);
else {
for(const file of files){
let data = fs.readFileSync(dir + file);
let a = await addFile(data, file);
console.log(nameToHash); //writeJSON();
}
}
})
从这里 ipfs-api
模块的文档:https://www.npmjs.com/package/ipfs-api,我看到这个模块的许多函数都使用回调样式。所以await
不等也是正常的。
为了使用async/await关键字,你应该promisify回调函数。 这篇文章可能会帮助您更好地理解:https://flaviocopes.com/node-promisify/