gpt4 book ai didi

javascript - 导出异步函数调用结果的变量

转载 作者:太空宇宙 更新时间:2023-11-03 23:29:43 29 4
gpt4 key购买 nike

我正在创建一个将使用 https://github.com/vpulim/node-soap 的应用程序与肥皂服务器通信。

我想创建一个客户端组件,我会将必要的方法转发到使用此模块创建的肥皂客户端。

由于客户端是异步创建的,因此我无法返回将使用此客户端的对象。

var soap = require('soap');
var url = 'http://someurl?wsdl';

soap.createClient(url, function(err, client) {
if (err) {
console.log(err);
return;
}
console.log(client.describe());
// I need to publish this client so that other functions in this file will be able to use it
});



module.exports = {
doSomething: function() {
//how can I access the client here?
}
};

我该如何去做呢?

最佳答案

此问题的一种解决方案是使用 promises :

var soap = require('soap');
var url = 'http://someurl?wsdl';

var clientPromise = new Promise(function(resolve, reject) {
soap.createClient(url, function(err, client) {
if (err) {
// reject the promise when an error occurs
reject(err);
return;
}

// resolve the promise with the client when it's ready
resolve(client);
});
});


module.exports = {
doSomething: function() {
// promise will wait asynchronously until client is ready
// then call the .then() callback with the resolved value (client)
return clientPromise.then(function(client) {
// do something with client here
}).catch(function(err) {
// handle errors here
console.error(err);
});
}
};

这样做的一些优点:

  • Promise 是原生 JavaScript 对象(从 Node 4.0.0 开始,包含 bluebird 等软件包,提供对早期版本的支持)
  • Promise 可以“重用”:如果 clientPromise 已经解析一次,则稍后调用 doSomething 时它将立即解析。

一些缺点:

  • doSomething 和所有其他导出函数本质上都是异步的。
  • 与 Node 类型回调不直接兼容。

关于javascript - 导出异步函数调用结果的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39733878/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com