StratifiedJS:如何从.js文件调用模块
StratifiedJS: how call modules from .js files
我正在使用库StratifiedJS(http://onilabs.com/stratifiedjs)来构建一个API数据库同步。
但是我对如何包含文件感到困惑。
正如文档所说,我以这种方式导入库:
<script type="text/javascript" src="js/stratified.js" main="js/index.sjs"></script>
我的 index.sjs 文件有以下代码:
db = require("mongo");
var data = db.find({collection: "itens"});
模块 mongo 中的find
方法具有以下代码:
exports.find = function(params) {
waitfor(var rows) {
$.getJSON("db/find", params, function(result){
resume(result.rows);
});
}
return rows;
}
当我通过文件 index.sjs 或通过标签内的脚本访问数据库模块时:
<script type="text/sjs"> ... code .. </ script>
代码运行完美。但是当我尝试通过 "text/javascript"
类型的文件进行访问时,行为会发生变化。
在这种情况下,如果我将下面的代码运行到一个文件中.js
:
var data = db.find({collection: "itens"});
数据变量将不包含从 base 返回的数据,因为代码return rows;
在执行getJSON
回调函数之前运行;
我的问题是:然后如何以 javascript 文件类型运行在 sjs 文件中声明的模块。
这里的问题是普通JS不能像分层JS那样阻塞和等待异步结果(这当然是我们首先拥有SJS的原因!
因此,当你有一个分层函数执行异步操作并从普通的JS函数调用它时,后者将不会"看到"分层函数的实际值,而是一种"延续"对象。
JS不能真正对这个延续对象做任何事情,所以这个想法是,一个典型的SJS程序将具有分层的顶级代码,该代码调用其他分层或非分层代码,但你永远不会(或很少)调用非分层代码的分层代码。
如果你真的需要从"普通"非分层代码调用分层,你可以安排分层函数采用可选的回调参数:
// SJS file:
exports.find = function(params, callback) {
waitfor (var rows) { ... }
if (callback)
callback(rows);
else
return rows;
}
.
// called from SJS:
var data = db.find({collection:'items'});
... use data ...
.
// called from JS:
db.find({collection:'items'}, function(data) { ... use data ... });
或者,您可以使用"延迟"(https://conductance.io/reference#sjs:function::deferred) 包装 SJS 函数,然后在 JS 中使用回调处理结果:
// SJS file:
exports.find = function(params) { ... };
exports.deferredFind = require('sjs:function').deferred(exports.find);
.
// JS file:
...
db.deferredFind({collection: 'items'}).then(function(data) { ... });
- 从.js文件调用html中的js函数
- 可以't在Wordpress中从HTML中的JS文件调用函数
- 从HTML中的外部JS文件调用函数
- 从angularjs文件调用apicontroller时未发现错误
- 无法从 jquery 中的外部文件调用特定内容
- 如何检查该函数是否从外部js文件调用
- 如何在 jQuery 中使用 eval 从不同的文件调用另一个函数
- 从 PHP 文件调用 js 函数
- 在Rails中使用remote:true在Chrome中有效,但在Safari中无效——从js.erb文件调用succe
- 从外部Javascript文件调用方法
- 从单个angularjs文件调用所有控制器
- 从.ascx文件调用Javascript函数时出错
- 如何从批处理文件调用一个带有2个参数的java脚本函数,并将结果返回到环境变量
- 从另一个文件调用时出现Javascript作用域错误
- 从一个 Javascript 文件中从另一个 Javascript 文件调用函数
- 如何从另一个.js文件调用.js
- 从另一个文件调用函数
- 从 erb 文件调用 js 函数
- 使用 Node js 从另一个文件调用两个文件
- 从 rails 中的不同 coffeescript 文件调用函数