尝试使用 https 模块访问端点时出现“Promise 未定义”
2019-02-22
1343
我试图确保 Netsuite 上 salesOrder 上的任何更改都会反映在 Cloud Firestore 数据库中的 salesOrder 集合副本中。
出于某种原因,我在尝试编辑和保存 salesOrder 时收到的响应是
org.mozilla.javascript.EcmaError: ReferenceError: “Promise” 未定义。(/SuiteScripts/postSalesOrder-v2.js#30)
这是链接到 salesOrder 的脚本:
/**
* User Event 2.0 example detailing usage of the Submit events
*
@NApiVersion 2.x
@NModuleScope SameAccount
@NScriptType UserEventScript
@appliedtorecord salesorder
*/
define(['N/https'], function(https) {
function myAfterSubmit(context) {
var apiURL = 'https://myApiEndpoint';
var headers = {
'content-type': 'application/json',
accept: 'application/json'
};
https.post
.promise({
url: apiURL,
headers: headers,
body: JSON.stringify(context.newRecord)
})
.then(function(response) {
log.debug({
title: 'Response',
details: response
});
})
.catch(function onRejected(reason) {
log.debug({
title: 'Invalid Post Request: ',
details: reason
});
});
return true;
}
return {
afterSubmit: myAfterSubmit
};
});
2个回答
服务器端 http 调用是同步的,并返回响应而不是 Promise。
bknights
2019-02-22
目前,可以在服务器端 SuiteScript 中使用
http.[get|post|etc].promise
。
如果您调用其中的几个,是否真的会并行运行,或者脚本是否会在没有实现承诺的情况下退出,谁也说不准,但 API 在 SuiteScript 2.1 中确实有效。
/**
* @NApiVersion 2.1
* @NScriptType UserEventScript
*/
define(['N/https'], function (https) {
function afterSubmit(context) {
https.post.promise({
url: "https://stackoverflow.com",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
message: "Hey planet"
})
});
}
return {
afterSubmit: afterSubmit
};
});
注释中的标签 (
@NApiVersion 2.1
) 很重要,否则您正在使用不支持较新 Javascript 功能的 SuiteScript 2.0。
Ronnie Overby
2023-08-11