如何获取异步的值并将其传递给函数?
How can I get the value of a async and pass to a function?
作为 lastSave 函数的结果,我需要获取 mtime 和 return 的值,但我未定义。我知道我可以使用 fs.statSync("./Data.xlsx") 来获取这个值。我使用 fs.stat() 作为函数内部异步的示例。
const lastSave = async (file) => {
const momento = await fs.stat(file, function (err, stats) {
var mtime = stats.mtime;
console.log("interno", mtime); // this works
return mtime
});
return momento
}
console.log(lastSave('./Data.xlsx')) // this writes "undefined"
使用函数的同步变量。
const fs = require('fs');
const lastSave = file => {
return fs.statSync(file).mtime;
}
console.log(lastSave('./Data.xlsx'));
如果没有同步版本,将调用包装在异步函数中并调用它:
const fs = require('fs');
const lastSave = file => {
return new Promise(done => fs.stat(file, function (err, stats) {
var mtime = stats.mtime;
console.log("interno", mtime); // this works
done(mtime);
}));
}
(async () => {
console.log(await lastSave('./Data.xlsx'));
})();
您可以使用基于承诺的变体:
const fs = require('fs/promises');
const lastSave = async file => {
return (await fs.stat(file)).mtime;
}
(async () => {
console.log(await lastSave('./Data.xlsx'));
})();
或者您可以 promisify 您的异步函数:
const fs = require('fs');
const util = require('util');
const lastSave = async file => {
return (await util.promisify(fs.stat)(file)).mtime;
}
(async () => {
console.log(await lastSave('./Data.xlsx'));
})();
替代
(async () => {
console.log(await lastSave('./Data.xlsx'));
})();
是
lastSave('./Data.xlsx').then(console.log);
和
lastSave('./Data.xlsx').then(result => { console.log(result); });
作为 lastSave 函数的结果,我需要获取 mtime 和 return 的值,但我未定义。我知道我可以使用 fs.statSync("./Data.xlsx") 来获取这个值。我使用 fs.stat() 作为函数内部异步的示例。
const lastSave = async (file) => {
const momento = await fs.stat(file, function (err, stats) {
var mtime = stats.mtime;
console.log("interno", mtime); // this works
return mtime
});
return momento
}
console.log(lastSave('./Data.xlsx')) // this writes "undefined"
使用函数的同步变量。
const fs = require('fs');
const lastSave = file => {
return fs.statSync(file).mtime;
}
console.log(lastSave('./Data.xlsx'));
如果没有同步版本,将调用包装在异步函数中并调用它:
const fs = require('fs');
const lastSave = file => {
return new Promise(done => fs.stat(file, function (err, stats) {
var mtime = stats.mtime;
console.log("interno", mtime); // this works
done(mtime);
}));
}
(async () => {
console.log(await lastSave('./Data.xlsx'));
})();
您可以使用基于承诺的变体:
const fs = require('fs/promises');
const lastSave = async file => {
return (await fs.stat(file)).mtime;
}
(async () => {
console.log(await lastSave('./Data.xlsx'));
})();
或者您可以 promisify 您的异步函数:
const fs = require('fs');
const util = require('util');
const lastSave = async file => {
return (await util.promisify(fs.stat)(file)).mtime;
}
(async () => {
console.log(await lastSave('./Data.xlsx'));
})();
替代
(async () => {
console.log(await lastSave('./Data.xlsx'));
})();
是
lastSave('./Data.xlsx').then(console.log);
和
lastSave('./Data.xlsx').then(result => { console.log(result); });