V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
duola
V2EX  ›  JavaScript

请教一个简单的 js 问题。

  •  1
     
  •   duola · 2019-05-25 08:27:30 +08:00 · 4783 次点击
    这是一个创建于 2017 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在这里麻烦大家了,谢谢!

    16 条回复    2019-11-24 22:42:38 +08:00
    Luoheqp
        1
    Luoheqp  
       2019-05-25 08:31:51 +08:00
    难道 return 不能解决么?执行的时候前面放个变量接收就好了
    wyongjian
        2
    wyongjian  
       2019-05-25 08:36:19 +08:00
    在 tmp_md5 = spark.end()前面加个 return 变成 return tmp_md5 = spark.end()
    uilvn
        3
    uilvn  
       2019-05-25 08:37:31 +08:00
    这个函数会异步读取文件,可以用类似
    return new Promise((resolve, reject) => {
    ...
    resolve(tmp_md5)
    })
    的方法做
    jc89898
        4
    jc89898  
       2019-05-25 08:47:23 +08:00
    Promise
    Biwood
        5
    Biwood  
       2019-05-25 09:12:43 +08:00
    由于是 File ​ Reader ​.read ​ AsArray ​ Buffer 是一个异步操作,所以需要用到回调函数:

    get_filemd5sum(ofile, callback) {
    ...
    tmp_md5 = spark.end();
    callback(temp_md5);
    ...
    }

    或者用 Promise 也行,方法如 3 楼
    kinghly
        6
    kinghly  
       2019-05-25 09:37:18 +08:00
    你的 tmp_md5 是全局变量来的。
    supuwoerc
        7
    supuwoerc  
       2019-05-25 10:09:26 +08:00
    这是异步操作,像楼上说的用 promise+then 写吧

    promise 对象: http://es6.ruanyifeng.com/#docs/promise
    BreezeInWind
        8
    BreezeInWind  
       2019-05-25 10:11:38 +08:00 via Android
    async await 也可以,不过注意兼容性
    jin5354
        9
    jin5354  
       2019-05-25 11:34:31 +08:00
    异步操作,promise 包一下吧
    duola
        10
    duola  
    OP
       2019-05-25 12:42:02 +08:00
    @Luoheqp @wyongjian
    函数异步读取文件,return 不了值。
    感谢两位回复。
    duola
        11
    duola  
    OP
       2019-05-25 12:53:32 +08:00
    @uilvn 非常感谢,我用了你的方法可以取得到值。
    @jc89898 谢谢你的关键字,我了解一下。
    @Biwood 非常感谢,我也试也你的办法,也是可以的。
    @supuwoerc 非常感谢,我好好看一下。
    @hedamao9999 谢谢提醒。
    @jin5354 感谢回复,

    问题已经得到解决,非常感谢各位!

    总结:是自己对 JavaScript 了解得太少了,得加强学习。
    lzvezr
        12
    lzvezr  
       2019-05-25 13:01:09 +08:00 via iPhone
    用 promise 包装一下,然后直接上 async/await 就非常爽
    ochatokori
        13
    ochatokori  
       2019-05-25 14:23:08 +08:00 via Android
    要么 callback, 要么 promise
    我初学的时候也被这个问题困扰哈哈,异步的结果 return 不出去。。。
    chenjunyue520
        14
    chenjunyue520  
       2019-05-26 07:29:41 +08:00
    callback 进去吧。
    chenhui7373
        15
    chenhui7373  
       2019-11-24 22:41:53 +08:00
    @duola 你好 能帮个忙吗
    chenhui7373
        16
    chenhui7373  
       2019-11-24 22:42:38 +08:00
    能不能转让下 《程序员聊设计》这本书
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2528 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 02:46 · PVG 10:46 · LAX 18:46 · JFK 21:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.