Typescript:如何使用回调调用 Javascript 函数
Posted
技术标签:
【中文标题】Typescript:如何使用回调调用 Javascript 函数【英文标题】:Typescript: how to call a Javascript function with a callback 【发布时间】:2017-12-18 07:52:21 【问题描述】:我正在使用 Ionic 和 Typescript。我需要访问following api:
load(key, successCallback/*(value)*/, failCallback)
在 Typescript 中,我执行以下操作:
cordova.plugins.icloudkv.load('key').then((data) =>
console.log(data);
alert('load key: ' + JSON.stringify(data));
);
).catch((e) =>
console.error(JSON.stringify(e));
this.doAlert('iCloud: ' + JSON.stringify(e));
);
但是,alert
永远不会被解雇。
问题
请有人建议使用 typescript 调用 javascript 函数的最佳方法是什么?
谢谢
【问题讨论】:
它会返回一个承诺吗?如果不是,您可能需要执行以下操作:cordova.plugins.icloudkv.load('key', () =>, () =>)
??
如果不是,你不能把它当作一个承诺。要么将其转换为 Promise(或可观察的 - github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/…),要么注意 TS 只是 JS 的一个子集,并像以前一样调用它,传入一个回调(箭头)函数。
您可以使用类中的方法作为成功/错误处理程序。 cordova.plugins.icloudkv.load('key', this.someClassMethod, this.someOtherClassMethod);
@AlexanderStaroselsky 但请注意,如果您这样做,this
可能会以意想不到的方式表现。
【参考方案1】:
根据您提供的 api,您的代码应该看起来更像:
cordova.plugins.icloudkv.load('key',
(data)=>
console.log(data);
alert('load key: ' + JSON.stringify(data));
, (e)=>
console.error(JSON.stringify(e));
this.doAlert('iCloud: ' + JSON.stringify(e));
);
【讨论】:
谢谢你,我只是在测试它,如果它有效,我会将其标记为答案【参考方案2】:您是否在控制台中遇到任何错误?
您的代码假定 load
返回一个 Promise。看看这是否可行,因为该示例在 load
方法中明确要求两个回调:
cordova.plugins.icloudkv.load('key', (data) =>
console.log(data);
alert('load key: ' + JSON.stringify(data));
, (e) =>
console.error(JSON.stringify(e));
this.doAlert('iCloud: ' + JSON.stringify(e));
);
【讨论】:
另外,请记住,箭头函数this
将具有不同的范围。我的示例假设这是您想要的范围。
谢谢。你有正确的答案。但这与您之前发布的某人的答案相同,因此我将其标记为正确答案。你得到了赞成票哈哈【参考方案3】:
如果您更喜欢使用 Promise
,即使 api 不使用,请在调用周围构造一个 Promise
:
new Promise((resolve, reject) => cordova.plugins.icloudkv.load('key', resolve, reject))
.then((data) =>
console.log(data);
alert('load key: ' + JSON.stringify(data));
);
).catch((e) =>
console.error(JSON.stringify(e));
this.doAlert('iCloud: ' + JSON.stringify(e));
);
【讨论】:
以上是关于Typescript:如何使用回调调用 Javascript 函数的主要内容,如果未能解决你的问题,请参考以下文章
在jQuery回调中调用TypeScript“this”范围问题
如何在返回其回调之一结果的函数的 Typescript 中声明类型?
如何在 javascript/typescript 事件回调中访问它,同时保留 removeEventListener 的能力? [复制]