Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript NodeJS-对API调用使用承诺_Javascript_Node.js_Asynchronous_Promise_Es6 Promise - Fatal编程技术网

Javascript NodeJS-对API调用使用承诺

Javascript NodeJS-对API调用使用承诺,javascript,node.js,asynchronous,promise,es6-promise,Javascript,Node.js,Asynchronous,Promise,Es6 Promise,我有一个nodeJS库,在这里我编写了一个特定的功能,它将调用soapapi来获取信息 我希望人们能很容易地使用图书馆。这样他们就可以打电话: library.requestThatService(parameters ...); 图书馆应该处理所有幕后的肮脏工作。我希望库首先可能验证给定的参数。然后根据参数构造要发送的消息(序列化?),创建签名等。。。最后,使用soap客户机调用soap API,包括之前创建和签名的消息 现在我正在考虑使用javascript来实现这一点。我不确定是否应该包

我有一个nodeJS库,在这里我编写了一个特定的功能,它将调用soapapi来获取信息

我希望人们能很容易地使用图书馆。这样他们就可以打电话:

library.requestThatService(parameters ...);
图书馆应该处理所有幕后的肮脏工作。我希望库首先可能验证给定的参数。然后根据参数构造要发送的消息(序列化?),创建签名等。。。最后,使用soap客户机调用soap API,包括之前创建和签名的消息

现在我正在考虑使用javascript来实现这一点。我不确定是否应该包装整个库。requestThatService(parameters…)函数返回承诺,然后使用fail和success函数(.then in practice)我真正想问的是,我应该只对实际的异步API调用使用异步,还是对整个库函数使用异步?我可以向它添加回调函数,而不是通过库调用来返回承诺。然后在库函数中,我应该只对发送SOAP请求的部分使用异步承诺。并且不包括异步部分的验证和消息创建,因为它们不是异步操作。

SOAP客户端可能已经自己返回了一个承诺。因此,我会有两个关于函数的承诺,我不确定这是否真的是一个好主意。那么其中一个承诺就不会被解决或拒绝

我应该只对实际的异步API调用使用async,还是对整个库函数使用async

是-始终在最低级别承诺!你会想自己使用承诺的力量,不是吗

SOAP客户端可能已经自己返回了一个承诺。因此,我会有两个关于函数的承诺,我不确定这是否真的是一个好主意


实际上,在另一个
新promise
调用中包装一个承诺返回调用是一个偶数。

我是应该只对实际的异步API调用使用async,还是对整个库函数使用async?
-是,无论你选择哪一个都是好的——只要你不认为你能以某种方式使异步代码同步,你能解释为什么这两个选项都是好的吗?从那时起,我将包括一些不是真正异步的操作。然后,我在一个函数中有两个承诺,这听起来不太好,allAsync API函数应该返回一个承诺,因为它们比普通回调更强大、更灵活。非异步API函数应该返回任何正常的同步返回值。你永远不需要回报两个承诺。如果有两个异步操作并行运行,则可以在内部使用两个承诺,但它们将组合成一个返回的承诺,表示两个承诺何时完成,如
promise.all()
。如果要使用承诺,请正确使用它们,在大多数情况下,你不会在一个函数周围有两个承诺-你将使用承诺链,因为它们应该被使用。-如果你不理解这一点,或者如果承诺链不是最佳解决方案,请使用回调,就像其他标准节点一样。承诺并不总是异步编程的答案,它们是一种工具,与任何工具一样,最好在它们是手头工作的最佳工具时使用。您是否建议,如果我只是创建一个承诺链,我实际上可以将承诺用于验证和签名部分?我可以将验证和签名模块化到它们自己的函数中,让它们返回一个承诺,即我可以链接到实际的API调用?但是因为验证和签名不是异步操作,所以对它们使用承诺是正确的吗?这感觉再次正确,但它还没有完全回答这个问题。然后我是否应该向库的主函数追加一个回调?这样库函数本身就不会返回承诺?但是在库的主函数中执行的api调用将返回一个承诺,但该承诺不是主函数的返回值。由于验证和签名也可能失败,因此它们不会返回承诺。不,您将在api调用上使用承诺链接,就像您希望用户在库上使用承诺链接一样。如果验证和签名可以在不异步的情况下失败,请查看OK,这样就可以从同步操作返回承诺。我会让整个库返回一个承诺,即使库执行的某些函数不是异步操作。是的。“有时是同步的”是一种承诺,所以我们总是回报一个承诺。