JavaScript创建,调用和触发自定义回调

时间:2018-06-25 11:53:48

标签: javascript node.js asynchronous callback

我正在使用webpack和node创建自己的类/库/ sdk。

基本上,它会拍摄一张图像并将其提交给api,然后再执行其他一些无关紧要的耗时功能。

但是因为此submit()函数是异步的,所以我想添加回调功能,以便用户知道它是否以及何时完成或出错。

下面是我如何看到用户对其进行初始化以及如何收听onSuccessonError回调的一种方式。

客户端Javascript

<button onclick="hsp.submit()" type="button">Submit</button>

-

<script type="text/javascript">
    const hsp = new HSP("123");

    hsp.onSuccess(function (response) {
        console.log(response);
    });

    hsp.onError(function (error) {
        console.log(error);
    });

</script>

图书馆

var HSFileReader = require('./helper/filereader');
var api = require('./api');

    class HSP {

        constructor(product) {

    }
        async submit() {

            try {

           //action 1 
           //action 2
           //action 3
           // if it reaches the end it has completed call success


            } catch (e) {
                throw "Error(submit): Failed to submit" + e;
            }
        }

        onSuccess(response) {

        }

        onError(errors) {

        }

    }

    module.exports = HSP;

因此,在该 async Submit()函数中,我执行3个操作(例如,调用外部api)。如果所有动作都已完成,我想触发此onSuccess回调,以便客户端知道它已完成并获取响应。如果类似地发生任何错误,我想触发onError回调吗?

所以我的问题是假设以上是处理此问题的适当方法,我该如何在我的Submit函数中触发这些回调?

1 个答案:

答案 0 :(得分:0)

编辑

尝试

var api = require('./api');

class HSP {

    constructor(product) { }

    async submit() {
        try {
       //action 1 
       //action 2
       //action 3
       // if it reaches the end it has completed call success
       return someValue;

        } catch (e) {
            throw "Error(submit): Failed to submit" + e;
        }
    }

}

module.exports = HSP; 

初始化

<script type="text/javascript">

    const hsp = new HSP("123");

    const submitOnClick = async () => {
         try {
             const response = await hsp.submit();
             // handle the response
         } catch(e) {
            // handle the errors
         }

    }

</script>

<button onclick="submitOnClick()" type="button">Submit</button>