gpt4 book ai didi

javascript - Meteor wrapAsync 同步执行但从不返回

转载 作者:搜寻专家 更新时间:2023-10-31 22:50:02 25 4
gpt4 key购买 nike

我正在尝试使用 wrapAsync 包装来自 Node 包的函数。

filepicker = new Filepicker('API Key') 
filepickerStatSync = Meteor.wrapAsync(filepicker.stat, filepicker)
result = filepickerStatSync(url);
console.log('after')

统计函数如下。

一切似乎都工作正常......请求调用以正确的结果响应,最终回调被调用,整个事情同步执行/据我所知正确产生......但同步调用永远不会返回并且console.log('after') 永远不会被命中。

我不认为我犯了与此 question 中相同的错误因为我的函数有一个回调作为最后一个参数。

我也不认为解决方案在这个 question 中因为包装函数确实以调用带有错误和结果的回调结束,这应该是 Meteor.wrapAsync 在签名中寻找的。

Filepicker.prototype.stat = function(url, options, callback) {
callback = callback || function(){};
if(!options) {
options = {};
}
if(!url) {
callback(new Error('Error: no url given'));
return;
}
request({
method: 'GET',
url: url+'/metadata?',
form: {
size: options.size || true,
mimetype: options.mimetype || true,
filename: options.filename || true,
width: options.width || true,
height: options.height || true,
writeable: options.writeable || true,
md5: options.md5 || true,
path: options.path || true,
container: options.container || true,
security: options.security || {}
}
}, function(err, res, body) {
console.log('err = '+err);
console.log('res = '+res);
console.log('body = '+body);
if(err) {
callback(err);
return;
}
var returnJson;
if(typeof(body)==='string'){
try {
returnJson = JSON.parse(body);
} catch(e) {
callback(new Error('Unknown response'), null, body);
return;
}
} else {
console.log('returnJSON');
returnJson = body;
}
console.log('callbacked');
callback(null, returnJson);
});
};

最佳答案

您包装的函数需要三个参数,但您只提供两个:url 和(隐含地)回调函数(我将其称为 cb) .所以在内部,将执行的是 Filepicker.prototype.stat(url, cb),即回调函数 cb 将被解释为 options 而不是 callback,并且 callback 将被设置为一个空函数。所以 wrapAsync 的回调永远不会被调用,因为回调链被打破了。

这应该有效:

result = filepickerStatSync(url, {});

关于javascript - Meteor wrapAsync 同步执行但从不返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32317948/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com