收藏
回答

在android真机中wx.createWorker()从子线程接收数据为空

框架类型 问题类型 API/组件名称 终端类型 操作系统 微信版本 基础库版本
小程序 Bug wx.createWorker() 客户端 6.6.6 1.9.98

在主线程中iOS真机中可以从子线拿到数据,但是在android真机中却没有从子线程中收到要处理的数据。


添加后,目录结构如下:



(1)在主线程的代码 app.js 中初始化 Worker

// 创建新进程

var worker = wx.createWorker('workers/request/index.js') // 文件名指定 worker 的入口文件路径,绝对路径

// 向子进程发送数据

worker.postMessage({

 msg: value// value是外界传过来的城市名数组,数组元素是对象如:{cityName: "", stationName: "贵阳"}

})

// 从子线程接收处理结果并展示

worker.onMessage(function (res) {

  console.log(res)

  that.globalData.pySeg = res.msg;

})


(2)workers/request/index.js 编写 Worker 响应代码

ar utils = require('/utils');

var pySegValue = [];

// 在 Worker 线程执行上下文会全局暴露一个 `worker` 对象,直接调用 worker.onMeesage/postMessage 即可

worker.onMessage(function (res) {

 if(pySegValue.length <=0){

   pySegValue = utils.pySegSort(res.msg);// 调用城市排序算法

   //向主线程发送数据

   worker.postMessage({

     msg: pySegValue

   })

 }

});


(3)workers/request/utils.js 编写 Worker 响应代码

// 城市排序

function pySegSort(arr) {

 if (!String.prototype.localeCompare)

   return null;


 var letters = "ABCDEFGHJKLMNOPQRSTWXYZ".split('');

 console.log(letters);

 var zh = "阿八嚓哒妸发旮哈讥咔垃麻拏噢妑七呥扨它穵夕丫帀".split('');

 console.log(zh);

 var segs = [];

 var curr;

 letters.forEach(function (item, i) {

   console.log(i);

   curr = { isUp: false, i: i, letter: item, data: [] };

   arr.forEach(function (item2) {

     if ((!zh[i] || zh[i].localeCompare(item2.stationName, "zh") <= 0) && item2.stationName.localeCompare(zh[i + 1], "zh") == -1) {

       curr.data.push(item2);

     }

   });

   if (curr.data.length) {

     segs.push(curr);

     curr.data.sort(function (a, b) {

       return a.stationName.localeCompare(b, "zh");

     });

   }

 });

 return segs;

}


module.exports = {

 pySegSort: pySegSort,

}

报错信息:






回答关注问题邀请回答
收藏

6 个回答

  • 韬々
    韬々
    2018-04-20

    这里定位到的问题是 String.prototype.localeCompare 方法在各平台的差异上。


    '阿'.localeCompare('纳雍', 'zh-Hans-CN')


    同样的这句代码,在iOS和工具上输出 -1,而安卓上输出 6028。原因是不同平台OS的排序算法不一样


    http://www.w3school.com.cn/js/jsref_localeCompare.asp




    这里需要自己考虑怎么做跨平台兼容了。

    2018-04-20
    有用
    回复
  • 俊逸非凡
    俊逸非凡
    2018-04-19

    wechatide://minicode/jgNUyMmX6lYo

    2018-04-19
    有用
    回复
  • 韬々
    韬々
    2018-04-19

    麻烦给个相关的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html),我们定位下问题

    2018-04-19
    有用
    回复
  • 俊逸非凡
    俊逸非凡
    2018-04-19

    应该是创建线程对象不成功,你们官方可以在在android真机中测试。


    2018-04-19
    有用
    回复
  • 俊逸非凡
    俊逸非凡
    2018-04-19


    var worker = wx.createWorker('workers/request/index.js') // 文件名指定 worker 的入口文件路径,绝对路径



    2018-04-19
    有用
    回复
  • 韬々
    韬々
    2018-04-18

    麻烦给个相关的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html),我们定位下问题

    2018-04-18
    有用
    回复
登录 后发表内容