Вы можете заключить обработчик в немедленно вызванное выражение функции и сохранить кэшированное обещание в закрытии:
const config = (() => {
let cachedPromise;
return () => {
if (!cachedPromise) {
cachedPromise = new Promise(resolve => {
setTimeout(() => {
resolve(5);
}, 1000)
});
}
cachedPromise.then((cache) => {
console.log(`Cached value ${cache}`);
})
};
})();
От этой статьи это похоже на Вас новый больше чем один XNamespace, добавьте атрибут в корне и затем перейдите к городу с обоими XNamespaces.
// The http://www.adventure-works.com namespace is forced to be the default namespace.
XNamespace aw = "http://www.adventure-works.com";
XNamespace fc = "www.fourthcoffee.com";
XElement root = new XElement(aw + "Root",
new XAttribute("xmlns", "http://www.adventure-works.com"),
/////////// I say, check out this line.
new XAttribute(XNamespace.Xmlns + "fc", "www.fourthcoffee.com"),
///////////
new XElement(fc + "Child",
new XElement(aw + "DifferentChild", "other content")
),
new XElement(aw + "Child2", "c2 content"),
new XElement(fc + "Child3", "c3 content")
);
Console.WriteLine(root);
Вот сообщение форума, показывающее, как сделать schemalocation.
Благодаря David B - я не совсем уверен, что понимаю, что все это кроме этого кода получает меня, в чем я нуждаюсь...
public XElement ToXElement()
{
const string ns = "http://www.someurl.com/ns/myroot";
const string w3 = "http://wwww.w3.org/2001/XMLSchema-instance";
const string schema_location = "http://www.someurl.com/ns/myroot http://www.someurl.com/xml/schemas/myschema.xsd";
XNamespace xnsp = ns;
XNamespace w3nsp = w3;
XElement xe = new XElement(xnsp + "myroot",
new XAttribute(XNamespace.Xmlns + "xsi", w3),
new XAttribute(w3nsp + "schemaLocation", schema_location),
new XElement(xnsp + "sometag", "somecontent")
);
return xe;
}
Кажется что, связывая пространство имен плюс строка, например,
w3nsp + "schemaLocation"дает названный атрибут
xsi:schemaLocationв получающемся XML, который является тем, в чем я нуждаюсь.