我正在尝试使用来自Transcrypt的获取API。
源:
headers = {
"Access-Control-Request-Method": "GET",
"Access-Control-Request-Headers": "origin, x-requested-with",
"Origin": "https://bar.com/"
}
args = {
"method":"OPTIONS",
"headers":headers
}
fetch("https://foo.com/",args).then(
lambda response: print(response),
lambda err: print(err)
)
编译为:
var headers = dict ({'Access-Control-Request-Method': 'GET', 'Access-Control-Request-Headers': 'origin, x-requested-with', 'Origin': 'https://bar.com/'});
var args = dict ({'method': 'OPTIONS', 'headers': headers});
fetch ('https://foo.com/', args).then ((function __lambda__ (response) {
return print (response);
}), (function __lambda__ (err) {
return print (err);
}));
指纹:
TypeError: Failed to execute 'fetch' on 'Window': Iterator is not an object.
如果我从编译的代码中删除dict
,它会运行。
如何编译为正确的Javascript对象而不是dict?
现在知道了。
事实证明:
https://www.transcrypt.org/docs/html/special_facilities.html#create-bare-javascript-objects-and-iterate-over-their-attributes-from-python-pragma-jsiter-and-pragma-nojsiter
通常,Python {...} 文本被编译为 dict ({...}( 以包含 Python 字典的特殊属性和方法,包括例如 迭 代。当编译指示('jsiter'(处于活动状态时,Python {...} 文字 编译为裸 {...},没有特殊属性或方法。自 仍然能够迭代这样一个裸露的JavaScript的属性 来自 Python 的对象,当编译指示('jsiter'( 处于活动状态时,一个 Python 用于 ...在。。。从字面上翻译为JavaScript(var ...在 ...).此编译指示的主要用例是方便地循环 通过元类的新方法中的类属性。作为一个 更灵活,但不太方便的替代方案,编译指示('JS', 可以使用"{}"、"...">
(。
所以代码应该是:
__pragma__('jsiter')
headers = {
"Access-Control-Request-Method": "GET",
"Access-Control-Request-Headers": "origin, x-requested-with",
"Origin": "https://bar.com/"
}
args = {
"method":"OPTIONS",
"headers":headers
}
__pragma__('nojsiter')