【发布时间】:2019-12-30 20:37:27
【问题描述】:
我编写了一个库函数pRead(Path),它返回一个JavaScript Promise 以使用Ajax 在Apache 服务器下读取本地计算机上的文件。我不会包含这方面的代码,因为它使用的标准技术对于任何可以很好地回答这个问题的人来说都是众所周知的。
我想编写第二个库函数pReadObj(Path),它将返回一个 Promise 以读取 JSON 文件并将其对象值提供给异步代码。它应该像这样工作:
pReadObj("test.json").then(then2).catch(pErr);
function then2(obj)
{
alert(JSON.stringify(obj)); // Shows the JSON obj
} // then2
这是我写的代码:
var globalPreviousResolve;
function pReadObj(Path) // Promise to read JSON from file
{
return new Promise(function(resolve,reject)
{
globalPreviousResolve=resolve;
pRead(Path).then(pReadObj2).catch(pErr);
});
} // pReadObj
function pReadObj2(JSONStr)
{
globalPreviousResolve(JSON.parse(JSONStr));
} // pReadObj2
function pTestDB() // Called from button
{
pReadObj("test.json").then(then2).catch(pErr);
} // pTestDB
这可行,但有一个问题:使用全局变量来保存解析回调不仅丑陋,而且如果在短时间内发生两次对 pReadObj 的调用并且磁盘读取需要更长的时间,它显然会发生故障比那个。
resolve 函数需要以某种方式存储在 Promise 中,我在想。
【问题讨论】:
标签: javascript promise