use*_*695 1 javascript node.js promise gm
我需要获取异步函数的值.我试图使用Promise,但这不起作用:
const res = new Promise(function (resolve, reject) {
gm(readStream).size({ bufferStream: true }, function (err, size) {
if (!err) resolve(size)
})
})
console.log(res)
Run Code Online (Sandbox Code Playgroud)
我得到的结果是 Promise { <pending> }
Promise是回调的抽象,而不是魔术.它们不能使异步代码同步.
正确的解决方案是:
const res = new Promise(function (resolve, reject) {
gm(readStream).size({ bufferStream: true }, function (err, size) {
if (err) reject(err);
else resolve(size);
})
});
res.then(function(promiseResolutionValue) {
console.log(res)
})
Run Code Online (Sandbox Code Playgroud)
你也可以async / await在这里使用:
const getSize = readStream => {
return new Promise(function (resolve, reject) {
gm(readStream).size({ bufferStream: true }, function (err, size) {
if (err) reject(err);
else resolve(size);
})
});
}
let printSize = async readStream => {
console.log(`Size is ${await getSize(readStream)}`);
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您正在使用NodeJS(版本8+),您可能可以调整您的功能使用util.promisify.
其他Promise库,例如Bluebird,也提供这样的函数,以便轻松地将"标准"节点样式函数(具有带有err, data作为参数的回调的函数)转换为promise返回等价物.
或者只是使用回调.
| 归档时间: |
|
| 查看次数: |
2047 次 |
| 最近记录: |