• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

javascript - 让回调在 JavaScript 中同步工作

[复制链接]
菜鸟教程小白 发表于 2022-12-11 21:46:31 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在使用一个名为 DSBridge 的包。将移动应用程序(在本例中为 iOS 代码)连接到包含我的应用程序主要逻辑的 javascript 代码。这涉及在不可见的 WKWebView 上运行 JavaScript。

我的 JavaScript 代码需要调用 native iOS 应用程序中的一个方法,该方法需要异步执行(为了不阻塞 UI),为此我在 JavaScript 中使用回调,在 native 中使用 completionHandler。

我的 Objective C 函数显示:

- (void)readNSDictionary *) args JSCallback) completionHandler{ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){ NSLog(@"读取中"); 而( self ->连接!= NULL){ if([self->connection isMessageAvailable]) { [self->connection messageRetrieved]; NSLog(@"ViewController 收到消息"); completionHandler([self->connection getMessage], YES); } } }); }

这里是从我的 JavaScript 调用的:

function read() {
    data = "reading";
    dsBridge.call("read", data, function (read_result) {
        console.log("read_result = ", read_result)
        return read_result;
        });
}

问题在于 JavaScript,一旦 Native 应用程序返回消息,我需要 JavaScript 函数“read”返回值“read_result”。现在我的代码正在调用 Objective-C ,它正在正确执行并将所需的值返回给 JavaScript 中的回调函数,但 JavaScript 函数“读取”已经完成,没有返回值。

有没有办法让我停止 JavaScript 直到回调完成?



Best Answer-推荐答案


您可以将回调传递给 read() 函数,并在底层 Objective-C 代码返回时调用它

function read(clb) {
  data = "reading";
  dsBridge.call("read", data, function (read_result) {
    clb(read_result);
  });
}

和你的来电者

read(res => {
  //result available here
  console.log(res);
})

也可以使用 Promise

function read() {
  data = "reading";
  return new Promise(resolve => {
    dsBridge.call("read", data, function (read_result) {
      resolve(read_result);
    });
  });
}

和调用者

read()
  .then(res => {
     //result available here
      console.log(res);
   })

关于javascript - 让回调在 JavaScript 中同步工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54186858/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap